Javascript 使用特定路径和命名空间连接到Socket.IO服务器

Javascript 使用特定路径和命名空间连接到Socket.IO服务器,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我的Node.js应用程序正在URL上运行 我已经用自定义名称空间配置了Socket.IO服务器(版本1.3.5)。下面是一个示例代码段: var server = http.createServer(...); var io = socketio(server); io .of('/a/b/c') .on('connection', function (socket) { socket.emit('update', {msg: '/a/b/c'}); }

我的Node.js应用程序正在URL上运行

我已经用自定义名称空间配置了Socket.IO服务器(版本1.3.5)。下面是一个示例代码段:

var server = http.createServer(...);
var io = socketio(server);
io
    .of('/a/b/c')
    .on('connection', function (socket) {
        socket.emit('update', {msg: '/a/b/c'});
    });
我不知道如何从客户端连接到此服务。我的猜测(这些都不起作用):


您可以在上查看官方文档。基本上,
socket.io
的好处在于,一旦客户端请求客户端源,它将传输客户端连接到服务器所需的所有必要细节(主机、路径、端口等)

要连接到特定的命名空间,只需在客户端上指定:

var socket = io('/a/b/c');

在一个稍微相似的场景中,我也在使用1.3.5,它来自一个角度单一的页面应用程序,其中socket.io的客户端代码只是与应用程序的其余部分连接在一起(来自bower软件包),而不是从特定的网络位置下载/包含

在我的socket.io所在的设置中,什么似乎对我有效:

http://somedomain.com:9096/sockets/socket.io.js
而不是默认值:

http://somedomain.com:9096/socket.io/socket.io.js
(我在服务器端手动调整了路径),是:

它看起来相当于您的场景:

io.connect('http://www.example.com/a/b/c', {path: '/myapp'});
这可能值得再试一次。我还没有完全测试带有斜杠的
namespaceName
,但当我简单地将名称空间更改为
“/a/b/c”时,它似乎在客户端建立了连接

可能不同的是我的服务器端设置,它是:

var server = http.createServer(app);
var io = require('socket.io')(server, { path: '/sockets' }).listen(server);

我的回答更一般地表明,尽管设置不明显,但可以同时使用命名空间和自定义路径。我希望它在某些方面对您有用。

在您的服务器上,也不要忘记指定路径:

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

io
.of('/my-namespace')
.on('connection', function(socket){
    console.log('a user connected with id %s', socket.id);

    socket.on('my-message', function (data) {
        io.of('my-namespace').emit('my-message', data);
        // or socket.emit(...)
        console.log('broadcasting my-message', data);
    });
});
在客户端上,不要混淆命名空间和路径:

var socket = io('http://www.example.com/my-namespace', { path: '/myapp/socket.io'});

显然它不起作用。它将尝试连接到类似
http://www.example.com/socket.io/?EIO=3&transport=polling&t=1428495850033-1
,当然,它返回
404notfound
。看起来您的HTTP服务器配置正确,并且您能够从
socket.io
服务器处理程序成功获取
socket.io.js
客户端源。好吧,奇怪的是它不起作用。我必须找些时间进行快速的本地设置,以了解我的情况。我还应该注意,如果我在配置Socket.IO服务器时没有名称空间,即没有('/a/b/c')
东西的
,那么以下客户端代码将按预期工作:
IO.connect('',{path:'/myapp/Socket.IO'})
@guidoman Hello,你找到解决问题的办法了吗?我正经历着和您上面所说的相同的行为。Web客户端对我来说已经足够了:var socket=io({path:'/myapp/socket.io'});在react原生项目中,我使用了:var socket=io.connect(url,{path:path,transports:['websocket']});如何将消息发送到具有路径的特定套接字id。我实现了相同的,但是套接字向同一个用户发出所有响应
var io  = require('socket.io')(http, { path: '/myapp/socket.io'});

io
.of('/my-namespace')
.on('connection', function(socket){
    console.log('a user connected with id %s', socket.id);

    socket.on('my-message', function (data) {
        io.of('my-namespace').emit('my-message', data);
        // or socket.emit(...)
        console.log('broadcasting my-message', data);
    });
});
var socket = io('http://www.example.com/my-namespace', { path: '/myapp/socket.io'});