WebSocket仅在本地file:///页面上执行时有效

时间:2011-02-06 00:34:40

标签: javascript html5 websocket

我正在尝试HTML5 WebSockets,我使用Nugget使我的基本客户端/服务器方案正常工作。但是,它仅在我执行本地HTML文件(file:///)时有效;只要我通过http://localhost/执行它就会失败。

因此,从localhost HTML文件连接到file:///有效,但通过localhost连接到http://localhost/失败。这很奇怪,很烦人,因为我希望能够在我的家庭网络中使用它。

我认为这可能是因为起源不一样(不同的端口),但这不是原因,因为端口必须不同,以免让Apache响应WebSocket请求。

客户端代码本身是最基本的形式:

var ws;

function wsi() {
 ws = new WebSocket('ws://localhost:8887/consoleappsample');

 ws.onmessage = function (evt) {
  alert(evt.data);
 }
}

window.onload = wsi;

有人看到我可能做错了吗?

1 个答案:

答案 0 :(得分:2)

我最终设法解决了这个问题。

在服务器中,必须添加以下内容(*而不是null),当然替换x:

var nugget = new WebSocketServer(8887, "*", "ws://192.168.x.x:8887");

然后,在HandshakeHandler.cs中,添加(当前最后一个条件不存在的地方):

if (hasRequiredFields && "ws://"+ClientHandshake.Host == Location && (ClientHandshake.Origin == Origin || Origin=="*"))

感谢所有回复。