node.js 和 socket.io。 websocket的传输类型配置?
Posted
技术标签:
【中文标题】node.js 和 socket.io。 websocket的传输类型配置?【英文标题】:node.js and socket.io. transport type configuration for websocket? 【发布时间】:2012-12-29 07:51:52 【问题描述】:这个问题涉及
我在两周内测试了 node js 和 socket.io。当我开始时,我从客户端中的socket.send(message)
函数中得到了问题。我无法向服务器发送任何消息。但我仍然可以从服务器接收消息。当我找到服务器端的配置传输时,我解决了这个问题:
socket.set('transports',[
'xhr-polling'
, 'jsonp-polling'
]);
一切都很好。现在我也可以向服务器发送消息了。但是我仍然有一个问题,为什么我必须配置传输。默认 socket.io 使用 websocket 传输设置,如下所示:
socket.set('transports', [
'websocket'
, 'flashsocket'
, 'htmlfile'
, 'xhr-polling'
, 'jsonp-polling'
]);
所以它首先使用 websocket,而不是 xhr-polling。但是服务端在使用socket.send(msg)
甚至socket.emit(...)
时都收不到客户端发来的任何消息。
所以问题是:这里不支持 websocket 是什么?浏览器或node.js ...对不起,我从谷歌搜索了很多页面,但我没有找到答案。
我使用 node.js 0.8.16 版、socket.io 0.9.13 版和最新的浏览器:chrome、firefox、opera
我想使用 websocket 而不是 xhr-polling。
【问题讨论】:
【参考方案1】:这很奇怪,因为即使您的服务器配置不支持 websocket,socket.io 也会选择下一个最佳可用方法(在您的情况下为 xhr-polling)。实际上,您甚至不需要设置这些传输,因为 socket.io 默认会尝试使用“websocket”作为主要方法。这可能表明存在其他问题,可能与您的代码有关?
不支持 websockets 的肯定不是你使用的浏览器,当然也不是 node.js。这取决于您的服务器设置。
第一次检查:
-
您正在监听的端口在您的防火墙中打开
您的网络服务器支持网络套接字。如果您使用 Apache 并将您的请求代理到内部 IP:PORT,除非您安装 apache-websocket 或 pywebsocket 之类的东西,否则 websocket 将无法工作
最终解决我的问题是禁用 Apache 监听端口 80 并让 node.js 监听该端口。这是对我有帮助的答案:https://***.com/a/7640966/2347777
【讨论】:
以上是关于node.js 和 socket.io。 websocket的传输类型配置?的主要内容,如果未能解决你的问题,请参考以下文章
Phaser.js 中的 Node.js 和 Socket.io 未连接 socket.io/?EIO=3&transport=polling