我需要使用网络套接字与用户进行一些交互。我从这里有很多复制粘贴的解决方案 - http://xsockets.net/blog/angular-js-xsocketsnet并且遇到了 Firefox (27.0.1) 的问题。
当我尝试进行此调用时(TwoWayBinding 是我的 XSockets 控制器,我在主机端使用 .NET MVC):
var connect = function (url) {
var deferred = $q.defer();
socket = new XSockets.WebSocket(url);
socket.on(XSockets.Events.open, function (conn) {
$rootScope.$apply(function () {
deferred.resolve(conn);
});
});
return deferred.promise;
};
connect("ws://localhost:49200/TwoWayBinding").then(function (ctx) {
isConnected = true;
queued.forEach(function (msg, i) {
publish(msg.t, msg.d);
});
queued = [];
});
我总是从 Firebug 收到一个错误:
Firefox 无法与位于 ws://localhost:49200/TwoWayBinding 的服务器建立连接。
this.webSocket = new window.WebSocket(url, subprotocol || "XSocketsNET");
相同的代码在 Chrome 中运行良好,它已连接,并且我收到了从主机发送的消息。提到的方法被包装到角度服务中,但这一切都有效,我不认为这应该是一个问题。
我能从 Fiddler 那里了解到的一件事是:
铬合金:
结果协议主机 URL 正文缓存内容类型进程注释自定义
3 200 HTTP 隧道到 localhost:49200 0 chrome:3976
结果协议主机 URL 正文缓存内容类型进程注释自定义
6 101 HTTP localhost:49200 /TwoWayBinding?XSocketsClientStorageGuid=5cf5c99aafd141d1b247ed70107659e0 0 chrome:3976
火狐:
结果协议主机 URL 正文缓存内容类型进程注释自定义
1740 200 HTTP 隧道到 localhost:49200 0 firefox:1420
结果协议主机 URL 正文缓存内容类型进程注释自定义
1741 - HTTP localhost:49200 /TwoWayBinding -1 firefox:1420
简单地说 - 在 Chrome 的响应中有一些额外的参数 XSocketsClientStorageGuid 不会出现在对 FF 的响应中。我不确定这是否有任何影响,或者我是否完全错了,但如果有人遇到同样的问题,我会很感激任何建议。
更新: 看起来关键线是这条线
socket = new XSockets.WebSocket(url);
因为在 Firefox 中未正确创建套接字。但我仍然没有这个原因。