【发布时间】:2011-11-13 05:59:08
【问题描述】:
我正在笔记本电脑上使用 node.js 和 socket.io 制作一个小型多人游戏。有时,当我想测试一些多人游戏功能时,我会使用我的 PC 登录游戏(PC 和笔记本电脑连接到 LAN 网络)。 Socket.io 连接到我路由器的 IP (196. ...) 和端口 8080。直到今天一切正常,当我只是想在更改任何内容之前看看它是如何工作的 - 突然它没有。我首先在笔记本电脑上打开 Google Chrome 并登录,一切正常。然后,我在我的电脑上打开了谷歌浏览器并尝试连接,但它没有工作。首先,用户在一个表单中输入他的名字和密码,然后点击一个登录按钮,它会调用这个函数:
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 时,什么也没有发生。我注意到服务器记录的消息类似于:
设置请求 GET /socket.io/1/websocket/
但是 xhr-polling 比 websocket 更频繁。这就是我目前所知道的,而且在 Firefox 上一切正常,所以我认为这是 Google Chrome 的问题。
我尝试从 PC 登录时的服务器日志:
调试 - 提供静态 /socket.io.js 调试 - 客户端授权
信息 - 握手授权 30836340583773206
调试 - 设置请求 GET /socket.io/1/websocket/30836340583773206
调试 - 为客户端 30836340583773206 设置心跳间隔
调试 - 客户端授权
调试 - 设置请求 GET /socket.io/1/xhr-polling/30836340583773206?t=1315509666877
调试 - 设置轮询超时
调试 - 丢弃传输
调试 - 清除客户端 30836340583773206 的心跳间隔
调试 - 提供静态 /socket.io.js
【问题讨论】:
-
您使用的是哪个版本的 Socket.IO,它们在客户端和服务器端是否匹配?
-
另外,您的 Mac 上的 Chrome 版本是什么,PC 上的版本是什么?我知道有一个新版本的网络套接字协议即将推出
-
您使用的是哪个版本的 Chrome,您使用的是哪个版本的 Socket.IO? Chrome 最近在 Chrome 14 (updates.html5rocks.com/2011/08/…) 中更新了它的 websocket 协议版本。好消息是最新版本的 SocketIO 确实支持这个新协议。
-
在我的笔记本电脑(Linux)13.0.782.220 上两者都是一样的。 Socket.io 是最新版本。我不明白它们在服务器和客户端上有何不同,服务器将其发送给客户端(我认为)!
-
感谢您提供更多信息。不过,我的想法很新鲜。如果 SO 上没有其他人为您提供任何东西,您可以考虑将其带到 Socket.IO 谷歌组。开发人员对那里的响应相当好。如果您确实弄明白了,请务必在此处回帖(作为您自己问题的答案)
标签: javascript google-chrome node.js websocket socket.io