node.js和socket.io。 websocket的传输typesconfiguration?

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

我在两周内testing节点js和socket.io。 当我开始我从客户端的socket.send(message)函数得到的问题。 我无法发送任何消息到服务器。 但是我仍然可以从服务器接收消息。 当我发现服务器端的configuration传输时,我解决了这个问题:

 socket.set('transports',[ 'xhr-polling' , 'jsonp-polling' ]); 

一切安好。 现在我可以发送消息到服务器了。 但我仍然有一个问题,为什么我必须configuration运输。 默认的socket.io使用websocket传输设置如下:

 socket.set('transports', [ 'websocket' , 'flashsocket' , 'htmlfile' , 'xhr-polling' , 'jsonp-polling' ]); 

所以它首先使用websocket,而不是xhr-polling。 但是,当使用socket.send(msg)甚至socket.emit(...)时,服务器不能接收到来自客户端的任何消息。

所以问题是:什么不支持websocket在这里? 浏览器或node.js …我很抱歉,但我从谷歌search这么多网页,我还没有find答案。

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

我想用websocket而不是xhr-polling。

这很奇怪,因为即使你的服务器configuration不支持websocket,socket.io会select下一个最好的方法(在你的情况下是xhr-polling)。 实际上,你甚至不需要设置这些传输,因为socket.io会默认使用'websocket'作为主要的方法。 这可能表示一些其他问题,可能与您的代码?

什么是不支持websockets绝对不是你使用的浏览器,当然也不是node.js。 这将取决于您的服务器设置。

首先检查:

  1. 您正在侦听的端口在您的防火墙中打开
  2. 你的web服务器支持websocket。 如果您使用的是Apache并将您的请求提供给内部IP:PORT,那么websocket将无法工作,除非您安装类似于apache-websocket或pywebsocket

终于解决了我的问题是禁用端口80上的Apache监听,并让Node.js监听端口。 这是对我帮助的答案: https : //stackoverflow.com/a/7640966/2347777