signalr - SignalR 用于 2 个网页
问题描述
我正在使用 .net 项目并创建一个与 SignalR 一起使用的网页。下面的代码适用于一个网页。客户端:
$.connection.hub.start().done(function () { });
var chat = $.connection.chatHub;
chat.client.broadcastMessage = function (name, message) { };
服务器端:
var context =
Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<SignalRChat.ChatHub>();
context.Clients.All.broadcastMessage(name, message);
然后我创建第二个网页并从第 1 页复制客户端和服务器代码。问题是当我调用
context.Clients.All.broadcastMessage(name, message);
从第二页开始。它触发了函数
chat.client.broadcastMessage
在第一页。如何将其修复为第 2 页的已解雇客户端?
谢谢
解决方案
你想让它在两个页面上触发吗 -
我怀疑您没有在第 2 页上创建连接。一旦您在第 2 页上建立了有效连接,如果您同时打开了第 1 页和第 2 页,它将在第 1 页和第 2 页上触发。或仅在您打开的页面上。
如果您希望它在每个页面上触发,但不是在两个页面上触发,您需要进行一些更改。您可以在此处使用多个选项,而无需额外的上下文:
- 非常简单 - 将第 2 页上的 chat.client.broadcastMessage 重命名为其他名称,并使用新方法从服务器调用它。
- 查看组 - 更新 context.Clients.Group(groupname).broadcastMessage(name, message) 您可以在第 1 页向用户发送消息(假设您有第 1 页和第 2 页的组),然后仅在页面上向用户发送消息2 需要时。
推荐阅读
- sql - 报表生成器中的饼图分为很多块?
- javascript - 使用 javascript 在 URL 中添加语言
- google-sheets - 在电子表格中保留值
- javascript - 在javascript中比较两个不同的数组
- jenkins - 当 github 上发生推送事件时触发参数化 jenkins 作业
- azure - 在 Azure Blob 上存储 csv 文件
- php - 使用 ajax 在 laravel 编辑表单的选定下拉列表中从数据库中调出数据
- ajax - $.blockUI() 在 IE 9 中匿名调用 ajax 方法
- javascript - html中的字符串模式验证
- ios - Swift 4 Firebase 存储元数据