Socket.io连接url?

时间:2012-03-15 22:45:22

标签: socket.io

我有当前的设置:

  1. 在端口80上运行的Nodejs代理(运行http-reverse-proxy)。
  2. Rails服务器在端口3000上运行
  3. 在端口8888上运行的Nodejs Web服务器
  4. 因此,任何以/ 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

    而收到404错误

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

5 个答案:

答案 0 :(得分:41)

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

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

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

答案 1 :(得分:12)

你可以像这样指定资源:

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

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

答案 2 :(得分:6)

如果您使用带有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)

答案 3 :(得分:3)

我使用以下方法来实现这一目标:

客户方:

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

答案 4 :(得分:0)

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