Socket.io连接url?

dis*_*dng 33 socket.io

我有当前的设置:

  1. 在端口80上运行的Nodejs代理(运行http-reverse-proxy).
  2. Rails服务器在端口3000上运行
  3. Nodejs在端口8888上运行的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和其他变种,但我仍然得到以下网址的错误http://myapp/socket.io/1/?t = 1331851089106

是否可以通过/ nodejs /告诉io.connect为每个连接URL添加前缀?

sup*_*nee 44

从Socket.io版本1开始,资源已被路径取代.使用 :

var socket = io('http://localhost', {path: '/nodejs/socket.io'});
Run Code Online (Sandbox Code Playgroud)

请参阅:http://blog.seafuj.com/migrating-to-socketio-1-0


Sir*_*ian 12

你可以像这样指定资源:

var socket = io.connect('http://localhost', {resource: 'nodejs'});
Run Code Online (Sandbox Code Playgroud)

默认情况下 resource = "socket.io"

  • 从v1.0开始,这已经过时了.资源已被路径取代.而是使用:var socket = io('http:// localhost',{'path':'/ nodejs/socket.io'}); (6认同)

zer*_*d0l 7

如果您使用express与nodejs:

服务器端:

var io = require('socket.io')(server, {path: '/octagon/socket.io'});
Run Code Online (Sandbox Code Playgroud)

然后

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')
    })
Run Code Online (Sandbox Code Playgroud)

客户端:

var socket = io('https://dev.octagon.com:8443', {path: '/octagon/socket.io'})
Run Code Online (Sandbox Code Playgroud)

然后

socket.emit('publish message ' + clientId, msg)
Run Code Online (Sandbox Code Playgroud)

  • 我发现除了服务器端,在客户端,使用`var socket = io({path:'/ octagon/socket.io'})`对我有用. (2认同)