相关疑难解决方法(0)

SignalR Core - 错误:Websocket已关闭,状态码为:1006

我在Angular应用程序中使用SignalR.当我在Angular中销毁组件时,我也想停止与集线器的连接.我使用命令:

this.hubConnection.stop();
Run Code Online (Sandbox Code Playgroud)

但是我在Chrome控制台中收到错误: Websocket已关闭状态代码:1006

在Edge中:错误错误:未捕获(在承诺中):错误:由于连接被关闭而取消了调用.错误:由于连接已关闭而取消了调用.

它实际上工作,连接已经停止,但我想知道为什么我得到错误.

这就是我启动集线器的方式:

this.hubConnection = new HubConnectionBuilder()
      .withUrl("/matchHub")
      .build();

    this.hubConnection.on("MatchUpdate", (match: Match) => {
      // some magic
    })

    this.hubConnection
      .start()
      .then(() => {
        this.hubConnection.invoke("SendUpdates");
      });
Run Code Online (Sandbox Code Playgroud)

编辑

我终于找到了这个问题.它是由Mongo改变流引起的.如果我从SendUpdates()方法中删除代码,则会触发OnDisconnected.

    public class MatchHub : Hub
    {
    private readonly IMatchManager matchManager;

    public MatchHub(IMatchManager matchManager)
    {
        this.matchManager = matchManager;
    }

    public async Task SendUpdates() {
        using (var changeStream = matchManager.GetChangeStream()) {
            while (changeStream.MoveNext()) {
                var changeStreamDocument = changeStream.Current.FullDocument;
                if (changeStreamDocument == null) {
                    changeStreamDocument = BsonSerializer.Deserialize<Match>(changeStream.Current.DocumentKey);
                }
                await Clients.Caller.SendAsync("MatchUpdate", changeStreamDocument); …
Run Code Online (Sandbox Code Playgroud)

mongodb signalr

12
推荐指数
1
解决办法
2893
查看次数

文件从浏览器传输到本地连接的iPhone

现在,我在My iPhone Application上创建了一个HTTP Server,并在那里托管了HTML.然后在浏览器中访问位于iPhone同一网络中的系统.我可以在浏览器上看到文件.

现在使用WebSockets我试图将文件从浏览器发送到应用程序,但它不起作用.文本消息没问题,但数据没有.作为一种解决方法,我通过Base64 String尝试了它,但在这种情况下也是套接字Get Closed.

为了使用JAVAScript上传,我编写了这段代码,在这里我尝试通过发送大小为200个字符的片段的Base64字符串.

    function sendFile() {
        var preview = document.querySelector('img');
        var file = document.querySelector('input[type=file]').files[0];
        var reader  = new FileReader();
        var rawData =  new ArrayBuffer();


        reader.onloadend = function () {
        var stringContent = reader.result;
        preview.src = stringContent;
        var array =  stringContent.match(/.{1,200}/g);
        for (var i = 0; i < array.length; i++) {
            ws.send(array[i]);
        };

      }
     if (file) {
        reader.readAsDataURL(file);
     }else {
        preview.src = "";
     }
}
Run Code Online (Sandbox Code Playgroud)

在iPhone方面,我使用了Libary CocoaHTTPServer的WebSocket

插座在此处关闭.

插座在此处关闭.

编辑

经过大量的试验和错误后,我才知道发生这种情况如果我在Mac浏览器中打开这个,不是在任何其他设备的浏览器如iPad,iPhone.这是非常奇怪的用例,但它是真的.

编辑二

经过大量的疑惑,我发现了一个线索,这对iPhone,iPad,iPod和Opera浏览器很有效,因为它们有旧的websocket支持,我从 …

javascript iphone websocket cocoahttpserver ios

11
推荐指数
1
解决办法
1647
查看次数

Websocket 因 1006 错误而断开连接,无原因

我正在我的网页游戏中记录断开连接。似乎 75% 的会话因代码 1001(正常)而断开连接,25% 的会话因代码 1006(错误)而断开连接。https://www.rfc-editor.org/rfc/rfc6455

有时,关于错误原因,我会看到以下文字:

CloudFlare WebSocket 代理重新启动

但 1006 次断开连接中的大多数根本没有给出任何原因。玩家们毫无理由地断开连接。这通常发生在玩家正在积极玩游戏的 5-30 分钟内。

我的设置有这些:

我的问题是:

  1. 如何更好地调试这个问题?
  2. 可能导致此问题的常见情况有哪些?

nginx websocket node.js cloudflare

4
推荐指数
1
解决办法
1万
查看次数

websocket关闭错误处理

在客户端到服务器之间建立 Web 套接字连接时,连接可能会由于多种原因意外关闭:

  1. TCP 通道上不活动。
  2. 服务器问题导致连接关闭。
  3. 客户端崩溃或重新加载/刷新。

我正在寻找处理此类情况的方法,或者至少知道它们发生了。

在阅读有关 WebSocket close 的文章时,我了解到 WebSocket 协议支持服务器发起的乒乓操作 ,可用于服务器了解客户端是否崩溃。(不支持客户端发起的乒乓)。- 这是处理客户端崩溃的最佳方法吗?

另外,我在规范中看到,在客户端我们可以监听 onClose 事件,并且有几个代码可以理解为什么连接已关闭 - 当服务器崩溃时是否总是调用 onClose 事件?

sockets error-handling websocket

3
推荐指数
1
解决办法
3366
查看次数