0

我需要使用网络套接字与用户进行一些交互。我从这里有很多复制粘贴的解决方案 - 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 中未正确创建套接字。但我仍然没有这个原因。

4

1 回答 1

0

你在什么版本上运行,你是使用 Nuget 包重新安装了 XSockets.NET 还是使用了上面问题中提到的 git 示例?

我刚刚在 FF 26.0 和 27.0.1 上进行了测试,使用这个例子确实很顺利;

http://xsockets.github.io/XSockets.JavaScript.API/test/index.html

我将尽快查看旧的 Angular 示例并确保它已修复,但存在问题!

亲切的问候

马格努斯

于 2014-02-27T16:41:52.543 回答