Socket.io连接url?

Socket.io连接url?,socket.io,Socket.io,我有当前设置: 在端口80上运行的Nodejs代理(运行http反向代理) 在端口3000上运行的Rails服务器 在端口8888上运行的Nodejs web服务器 因此,任何以/nodejs/开头的请求都将被重定向到8888上的nodejs web服务器 其他任何内容都将重定向到端口3000上的rails服务器 当前Socket.io需要io.connect的连接url 请注意,/nodejs/socket.io/socket.io.js是有效的,并返回所需的socket.io客户端js库

我有当前设置:

  • 在端口80上运行的Nodejs代理(运行http反向代理)
  • 在端口3000上运行的Rails服务器
  • 在端口8888上运行的Nodejs web服务器
  • 因此,任何以/nodejs/开头的请求都将被重定向到8888上的nodejs web服务器

    其他任何内容都将重定向到端口3000上的rails服务器

    当前Socket.io需要io.connect的连接url

    请注意,/nodejs/socket.io/socket.io.js是有效的,并返回所需的socket.io客户端js库


    但是,我无法在服务器上指定到/nodejs/的连接url

    我已经尝试过和其他变体,但我仍然得到以下url的404错误


    是否可以告诉io.connect以/nodejs/?为每个连接url添加前缀您可以这样指定资源:

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

    默认情况下,我使用以下方法来实现此目标:

    客户端:

    var socket = io.connect('http://localhost:8183/?clientId='+clientId,{"force new connection":true});
    
    var socket = io('https://dev.octagon.com:8443', {path: '/octagon/socket.io'})
    
    服务器端:

    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);
    
    });
    
    var io = require('socket.io')(server, {path: '/octagon/socket.io'});
    

    参考资料:

    从Socket.io版本1开始,资源已替换为路径。使用:

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

    请参阅:

    如果您将express与nodejs一起使用:

    服务器端:

    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);
    
    });
    
    var io = require('socket.io')(server, {path: '/octagon/socket.io'});
    
    然后

    客户端:

    var socket = io.connect('http://localhost:8183/?clientId='+clientId,{"force new connection":true});
    
    var socket = io('https://dev.octagon.com:8443', {path: '/octagon/socket.io'})
    
    然后


    如果您正在使用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')
    })
    

    事实上,我认为需要将
    {resource:'nodejs/socket.io'}
    放在这里。从v1.0开始,这已经过时了。资源已被路径替换。而是使用:var socket=io(“”,{'path':'/nodejs/socket.io'});这里有一个使用sails的类似问题:在这个uri中;你为什么用8183?我们知道套接字io的端口是3000?@shihab_返回您可以分配任何您想要的端口。您不需要使用3000。我发现除了服务器端之外,在客户端,使用
    var socket=io({path:'/octagon/socket.io'})
    对我也适用。