web-dev-qa-db-ja.com

Socket.io接続URL?

現在のセットアップがあります:

  1. ポート80で実行されているNodejsプロキシ(http-reverse-proxyを実行)。
  2. ポート3000で実行されているRailsサーバー
  3. ポート8888で実行されているNodejs Webサーバー

したがって、/ nodejs /で始まるリクエストは8888のnodejs Webサーバーにリダイレクトされます。

それ以外は、ポート3000のRailsサーバーにリダイレクトされます。

現在、Socket.ioにはio.connectの接続URLが必要です。

/ nodejs/socket.io/socket.io.jsは有効であり、必要なsocket.ioクライアントjsを返すことに注意してくださいとしょうかん。


ただし、サーバーでconnection_urlを/ nodejs /に指定することはできません。

http://myapp.com/nodejs およびその他の亜種を試しましたが、次のURLで404エラーが表示されます http://myapp/socket.io/1/ ?t = 1331851089106

Io.connectに各接続URLの前に/ nodejs /を付けるように指示することは可能ですか?

33
disappearedng

Socket.ioバージョン1では、リソースはパスに置き換えられました。つかいます :

var socket = io('http://localhost', {path: '/nodejs/socket.io'});

参照: http://blog.seafuj.com/migrating-to-socketio-1-

44
supershnee

次のようにリソースを指定できます。

var socket = io.connect('http://localhost', {resource: 'nodejs'});

デフォルトではresource = "socket.io"

12
Sirian

Nodejsでexpressを使用している場合:

サーバ側:

var io = require('socket.io')(server, {path: '/octagon/socket.io'});

それから

io.on('connection', function(socket) {
        console.log('a user connected, id ' + socket.id);
        socket.on('disconnect', function() {
            console.log('a user disconnected, id '  + socket.id);
        })
})
socket.on('publish message ' + clientId, function(msg) {
        console.log('got message')
    })

クライアント側:

var socket = io('https://dev.octagon.com:8443', {path: '/octagon/socket.io'})

それから

socket.emit('publish message ' + clientId, msg)
6
zer0Id0l

この目標を達成するために、以下のアプローチを使用します。

クライアント側:

var socket = io.connect('http://localhost:8183/?clientId='+clientId,{"force new connection":true});

サーバ側:

var io = require('socket.io').listen(server);
io.sockets.on('connection', function(socket) {
    console.log("url"+socket.handshake.url);
    clientId=socket.handshake.query.clientId;
    console.log("connected clientId:"+clientId);

});

参照: https://github.com/LearnBoost/socket.io/wiki/Authorizing#global-authorization

3
Neo

Expressでアプリを提供している場合は、これを確認できます。 Expressはhttpを使用してアプリケーションを提供することを忘れないでください。

const express   = require('express'),
      http      = require('http'),
      socketIo  = require('socket.io'),
      app       = express()

var server = http.createServer(app);
var io     = socketIo(server);

io.on('connection', (socket)=>{
      // run your code here
})

server.listen(process.env.PORT, ()=> {
    console.log('chat-app inintated succesfully')
})
0
Fillipo Sniper