2011-09-08 125 views
2

我正在我的笔记本电脑上使用node.js和socket.io制作一个小型多人游戏。偶尔,当我想测试一些多人游戏功能时,我使用我的电脑登录游戏(PC和笔记本电脑连接到局域网)。 Socket.io连接到我的路由器的IP(196. ...)和端口8080.一切都运行良好,直到今天,当我想在我改变任何东西时看到它是如何工作的 - 突然它没有。我首先在我的笔记本电脑上打开Goog​​le Chrome,然后登录,确定无误。然后,我在PC上打开Goog​​le Chrome并尝试连接,但无法正常工作。首先,用户输入自己的名字和密码的格式,并点击登录按钮,调用该函数:Google Chrome是否支持socket.io?

  login = function() 
      { 
       var n = document.forms['logn']['name'].value; 
       var p = document.forms['logn']['password'].value;    

      var socket = io.connect("http://192.168.0.13:8080"); 
      socket.emit("login", {n: n, p: p}); 

      socket.on("got", function(data){ 
       if (data.good) 
       { 
         main(socket, n) 
       } 
       else 
       { 
         alert("Failed to log in."); 
       } 
      }); 
      } 

当我的函数来获取的叫,什么都不会发生。我注意到,服务器日志类似这样的消息:

设置请求GET /socket.io/1/websocket/

但是XHR轮询更往往比WebSocket的。这就是我现在所知道的,同样,在Firefox上一切正常,所以我认为这是Google Chrome的一个问题。

服务器日志,当我尝试从PC登录:

调试 - 提供静态/socket.io.js调试 - 客户端授权
信息 - 握手授权30836340583773206
调试 - 设置请求GET /socket.io/1/websocket/30836340583773206
调试 - 客户端30836340583773206
调试设置心跳间隔 - 客户端授权
调试 - 设置请求GET /socket.io/1/xhr-polling/30836340583773206?t=13155096 66877个
调试 - 设置轮询超时
调试 - 丢弃运输
调试 - 清除心跳间隔为客户30836340583773206
调试 - 提供静态/socket.io.js

+0

? – Matt

+0

另外,您的Mac上有哪些Chrome版本,以及PC上的内容是什么?我知道有一个新版本的网络套接字协议下线 – Matt

+0

您使用的是什么版本的Chrome,以及您使用的是什么版本的Socket.IO? Chrome最近在Chrome 14中更新了它的websocket协议版本(http://updates.html5rocks.com/2011/08/What-s-different-in-the-new-WebSocket-protocol)。好消息是最新版本的SocketIO确实支持这个新协议。 – ebidel

回答

4

我只是恰好相同问题。

我可以握手,并通过Chrome进行身份验证,但任何发射都没有在客户端上正确处理(虽然Socket.io发送它们)。

登录到您的服务器并更新socket.io。

$> npm ls会告诉你已安装模块的最新版本。在我的例子中,我正在运行:

/var/www/discovery/node 
├─┬ [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
├── [email protected] 
├── [email protected] 
├── [email protected] 
├── [email protected] 
├─┬ [email protected] 
│ └─┬ [email protected] 
│ └── [email protected] 
└─┬ [email protected] 
    ├── [email protected] 
    ├── [email protected] 
    └─┬ [email protected] 
    ├── [email protected] 
    ├── [email protected] 
    └── [email protected] 

你可以看到[email protected]是旧的。这也意味着它没有最新的ws:// websocket协议更新。

所以为了解决这个问题,只需运行:

您正在使用哪个Socket.IO的版本?它们匹配的客户端和服务器端
$> npm update socket.io express 
+0

谢谢!虽然它随着它停止而开始工作......现在都很酷。 – corazza