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

2024-03-03

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

this.hubConnection.stop();

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

在边缘:错误错误:未捕获(承诺中):错误:由于连接关闭而取消了调用。错误:由于连接关闭而取消了调用。

它实际上有效并且连接已停止,但我想知道为什么会收到错误消息。

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

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

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

    this.hubConnection
      .start()
      .then(() => {
        this.hubConnection.invoke("SendUpdates");
      });

EDIT

我终于找到问题了。它是由 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);
            }
        }
    }

    public override async Task OnDisconnectedAsync(Exception exception)
    {
        await base.OnDisconnectedAsync(exception);
    }
}

来自管理器的方法 GetChangeStream。

        ChangeStreamOptions options = new ChangeStreamOptions() { FullDocument = ChangeStreamFullDocumentOption.UpdateLookup };
        var watch =  mongoDb.Matches.Watch(options).ToEnumerable().GetEnumerator();
        return watch;

但我不知道如何解决它。


造成这种情况的原因有很多,但我认为最有可能的是以下一个:

我认为这是因为服务器如何处理连接/断开连接事件。我不能肯定地说,但连接关闭也需要在服务器上使用代码正确处理。尝试覆盖服务器上内置的 On Connected /Disconnected 方法并查看。我的假设只是您正在关闭它,但服务器没有正确关闭,因此没有中继正确的关闭响应。

发现作为评论:获取 websockets 以关闭代码 1006 关闭的原因 https://stackoverflow.com/questions/19304157/getting-the-reason-why-websockets-closed-with-close-code-1006

您不需要更改连接/断开连接,因为一切正常。但作为答案,这个是最有可能的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SignalR Core - 错误:Websocket 已关闭,状态代码:1006 的相关文章

随机推荐

  • PostgreSQL - 错误:查询没有结果数据的目标

    为什么我会收到以下错误 错误 查询没有结果数据的目标 这是我的功能 CREATE OR REPLACE FUNCTION public SumASCII value character varying RETURNS int LANGUAG
  • 由点聚类着色的等高线图 matlab

    我有两个向量 它们是成对的值 size X 1e4 x 1 size Y 1e4 x 1 是否可以绘制一个contour plot某种方式通过最高密度的点来制作轮廓 即最高聚类 红色 然后在其他地方渐变颜色 如果您需要更多说明 请询问 问候
  • 引用另一个 Snakemake 规则的输入或输出文件

    如何以编程方式引用另一个 Snakemake 规则的属性 我需要更换什么
  • 为什么惰性评估有用?

    我长期以来一直想知道为什么惰性评估有用 我还没有人以一种有意义的方式向我解释 大多数情况下 它最终都会归结为 相信我 注意 我的意思不是记忆 主要是因为它可以更有效 如果不使用值 则不需要计算它们 例如 我可以将三个值传递到一个函数中 但根
  • 如何消除数字范围中的重叠 (AWK)

    我正在尝试删除文件内的重叠部分 有一堆以 A 开头的记录 并且具有 起始值 和 结束值 还有一堆以 B 开头的记录 也有范围 并且显示与以 A 开头的记录可能重叠 这个想法是从 A 中删除重叠范围 以便只存在非重叠范围 B 中的某些记录具有
  • 为什么GCC的ifstream >> double分配这么多内存?

    我需要读取一系列数字以空格分隔的人类可读文件 https earth info nga mil GandG wgs84 gravitymod egm96 ww15mgh grd z并做了一些数学计算 但我在读取文件时遇到了一些真正奇怪的内存
  • WPF 在单独的 UI 线程上加载动画? (C#)

    好的 我有一个加载动画 在填充大型数据表时运行 让用户知道程序尚未冻结 我的动画工作正常 但在数据表更新时它也会冻结 是否有某种方法可以拥有多个 UI 线程 以便在 DataTable 加载信息时动画能够继续运行 编辑 当前代码如下 pri
  • 检查 git 存储库的完整性

    当我的磁盘在访问 git 存储库时报告了一长串 不可恢复的读取错误 后 我担心我对其他存储库进行了一些推送 这些存储库可能会将错误的内容转发给它们 顺便说一句 在使用提交 推 拉访问存储库时 没有任何 git 命令报告任何错误 但访问存储库
  • PyQt QML 错误控制台丢失

    标题几乎说明了一切 假设我有这个简单的应用程序 main py gt gt gt import sys from PyQt5 QtCore import QUrl from PyQt5 QtWidgets import QApplicati
  • BeautifulSoup findall 带有类属性 - unicode 编码错误

    我正在使用 BeautifulSoup 从中提取新闻报道 仅标题 黑客新闻 http news ycombinator com到现在为止就这么多了 import urllib2 from BeautifulSoup import Beaut
  • 在具有大标题的导航控制器中时,UIRefreshControl 不会以横向方式显示

    我有一个普通的UITableViewController嵌入一 个UINavigationController which 喜欢大标题 我向表视图控制器添加了刷新控件 在 iOS 11 中的 iPhone 上 如果我以纵向模式启动应用程序
  • 列出已安装的移动配置文件

    在 OSX 上 有什么方法可以以编程方式获取计算机上安装的所有 iOS 移动配置文件的列表 这是您可以在 XCode 管理器中看到的列表 这可能是同一个列表 但如果你看一下 Library MobileDevice Provisioning
  • 为什么运行我的 Java 应用程序时 proxyHost/proxyPort 不起作用?

    我有一个与一些 REST 服务通信的 java 应用程序 我想使用 Fiddler 查看 HTTP 流量 Fiddler 充当 localhost 8888 上的代理 因此以下 Java VM 选项应该配置 java 以使用此代理 Dhtt
  • Android Studio 0.4.0 中添加新首选项屏幕的选项在哪里?

    Android Studio 0 4 0 Hello 我想在 Android Studio 中添加一个新的首选项屏幕 但是 我找不到执行此操作的菜单选项 在 Eclipse 中 您可以右键单击资源目录 新的 xml 文件 资源类型 偏好 但
  • 不小心安装了 python 3.5 与 python3.5:这不好吗?

    我运行预装了 Python 3 4 x 的 Linux Mint 我正在开始一个新项目 想要利用 3 5 左右的东西 所以我决定安装 3 5 并创建指向它的新虚拟环境 所以 我不小心输入了 sudo apt get install pyth
  • 使用 Paramiko SSH 设置 virtualenv

    我在 Windows 中使用 Python 和 Django 的经验有限 现在我试图了解如何将我的代码部署到 Ubuntu 16 04 LTS VPS 在阅读了有关 SE 的各种教程和大量答案后 我成功地取得了很大的进展 好吧 对我来说 但
  • CUT 是否支持多个空格作为分隔符?

    我有这样的文字 word1 word2 word3 word4 一对单词之间可能有多个空格 我想从每行中获取一些单词列 当我使用cat file cut d f1 2 4似乎有些字段是空间 这不是我所期望的 我知道awk可以实现这一点 问题
  • PhantomJSDriver 接受警报

    如何使用 Java 中的 PhantomJSDriver 接受警报 我正在尝试通过 YouTube 来实现这一点 我无法让它工作 我尝试使用此代码在任何驱动程序上接受 但它不适用于 PhantomJS static void confirm
  • 用不同类型的对象填充列表

    我正在研究一种推荐算法 一切正常 但现在我想将这段代码实现到我的开发团队的分支中 我将从顶部开始 我的算法可以推荐两种类型的对象 餐厅和菜肴 餐厅 public class Restaurant public Guid Id get set
  • SignalR Core - 错误:Websocket 已关闭,状态代码:1006

    我在 Angular 应用程序中使用 SignalR 当我销毁 Angular 中的组件时 我也想停止与集线器的连接 我使用命令 this hubConnection stop 但我在 Chrome 控制台中收到错误 Websocket 已