Socket.io 连接网址?

Posted

技术标签:

【中文标题】Socket.io 连接网址?【英文标题】:Socket.io connection url? 【发布时间】:2012-04-01 12:37:59 【问题描述】:

我有当前的设置:

    Nodejs 代理(运行 http-reverse-proxy)在端口 80 上运行。 Rails 服务器在 3000 端口上运行 Nodejs Web 服务器运行在 8888 端口

所以任何以 /nodejs/ 开头的请求都会被重定向到 8888 上的 nodejs 网络服务器。

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

目前 Socket.io 需要 io.connect 的连接 url。

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


但是,我无法在我的服务器上将 connection_url 指定到 /nodejs/。

我已经尝试过http://myapp.com/nodejs 和其他变体,但我仍然收到以下 url http://myapp/socket.io/1/?t=1331851089106 的 404 错误

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

【问题讨论】:

这是一个使用sails的类似问题:***.com/questions/36348956/… 【参考方案1】:

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

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

见:http://blog.seafuj.com/migrating-to-socketio-1-0

【讨论】:

【参考方案2】:

你可以像这样指定资源:

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

默认resource = "socket.io"

【讨论】:

其实我觉得需要换成resource: 'nodejs/socket.io' 从 v1.0 开始已经过时。资源已被路径替换。而是使用: var socket = io('localhost', 'path': '/nodejs/socket.io');【参考方案3】:

如果你在 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)

【讨论】:

我发现除了服务器端,在客户端,使用var socket = io(path: '/octagon/socket.io') 对我有用。【参考方案4】:

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

客户端:

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

【讨论】:

在这个 uri 中; localhost:8183 ;你为什么用8183?我们知道socket io的端口是3000? @shihab_returns 您可以分配任何您想要的端口。您不需要使用 3000。【参考方案5】:

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

【讨论】:

以上是关于Socket.io 连接网址?的主要内容,如果未能解决你的问题,请参考以下文章

android studio连接io.socket:sokect.io-client服务器的条件

Socket.IO 中的跨域连接

如何在 Socket.IO 中模拟连接失败

expressJS 和 socket.io 监听不同的端口和 socket.io 客户端连接

socket.io / 连接参数

Socket.IO 客户端如何连接?