Javascript node.js和socket.io。websocket的传输类型配置?

Javascript node.js和socket.io。websocket的传输类型配置?,javascript,node.js,websocket,socket.io,Javascript,Node.js,Websocket,Socket.io,这个问题与socket.io版本

这个问题与socket.io版本<0.9.x有关。 较新版本具有不同的传输和设置传输的方法

我在两周内测试了节点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轮询。但是当使用
socket.send(msg)
甚至
socket.emit(…)
时,服务器无法接收从客户端发送的任何消息

所以问题是:这里什么不支持websocket?浏览器或node.js。。。很抱歉,我从谷歌搜索了这么多页面,但我还没有找到答案

我使用node.js版本0.8.16、socket.io版本0.9.13和最新的浏览器:chrome、firefox、opera


我想使用websocket而不是xhr轮询。

这很奇怪,因为即使服务器配置不支持websocket,socket.io也会选择下一个最佳可用方法(在您的情况下是xhr轮询)。实际上,您甚至不需要将这些传输设置为socket。默认情况下,io将尝试使用“websocket”作为主要方法。这可能表明您的代码可能存在其他问题

不支持WebSocket的肯定不是您使用的浏览器,当然也不是node.js。这将取决于您的服务器设置。

第一次检查:

  • 您正在侦听的端口已在防火墙中打开
  • 您的Web服务器支持WebSocket。如果您使用Apache并将请求代理到内部IP:端口,websocket将无法工作,除非您安装类似于或的东西
  • 最终解决我的问题的方法是禁用Apache在端口80上侦听,并让node.js在该端口上侦听。以下是对我有帮助的答案: