SignalR 多集线器连接 .NET Core
SignalR Multiple Hub Connection .NET Core
我有 2 个集线器 类,
SystemNotificationHub.cs
public class SystemNotificationHub : Hub { }
QuotationChatHub.cs
public class QuotationChatHub: Hub { }
SystemNotificationHub
在 _Layout.cshtml
中定义,因此用户可以连续连接到集线器,
当用户进入 QuotationChat.cshtml
页面时,我还希望同一用户连接 QuotationChatHub
,因此我希望用户以一种简单的方式同时连接多个集线器。
我不能让用户同时连接超过 1 个集线器。我怎样才能做到这一点?
启动端点配置
endpoints.MapHub<SystemNotificationHub>("/systemNotificationHub");
endpoints.MapHub<QuotationHub>("/quotationHub");
quotationChat.js
$(function () {
if (connection === null) {
connection = new signalR.HubConnectionBuilder()
.withUrl("/quotationHub")
.build();
connection.start().then(function () {
document.getElementById('sendButton').onclick = function () {
connection.invoke("BroadcastFromClient")
.catch(function (err) {
return console.error(err.toString());
});
};
});
}
});
notification.js
$(function () {
if (connection === null) {
connection = new signalR.HubConnectionBuilder()
.withUrl("/systemNotificationHub")
.build();
connection.on("Notify", function (response) {
});
connection.on("HubError", function (response) {
alert(response.error);
});
connection.start().then(function () {
connection.invoke("NotificationMethod")
.catch(function (err) {
return console.error(err.toString());
});
});
}
});
据我所知,这个问题与你代码中的 if 条件有关。
您在创建连接构建器之前检查过连接是否为空。但是两个js都使用相同的连接模型
为了解决这个问题,我建议您可以尝试为 systemNotificationHub 创建一个新连接,例如 connection1,这样您的代码就可以正常工作了。
更多详情,您可以参考以下代码:
quotationChat.js 未更改。
notification.js:
//Define a new connection1 as the new js object as connection
$(function () {
if (connection1 === null) {
connection1 = new signalR.HubConnectionBuilder()
.withUrl("/systemNotificationHub")
.build();
connection1.on("Notify", function (response) {
});
connection1.on("HubError", function (response) {
alert(response.error);
});
connection1.start().then(function () {
connection.invoke("NotificationMethod")
.catch(function (err) {
return console.error(err.toString());
});
});
}
});
我有 2 个集线器 类,
SystemNotificationHub.cs
public class SystemNotificationHub : Hub { }
QuotationChatHub.cs
public class QuotationChatHub: Hub { }
SystemNotificationHub
在 _Layout.cshtml
中定义,因此用户可以连续连接到集线器,
当用户进入 QuotationChat.cshtml
页面时,我还希望同一用户连接 QuotationChatHub
,因此我希望用户以一种简单的方式同时连接多个集线器。
我不能让用户同时连接超过 1 个集线器。我怎样才能做到这一点?
启动端点配置
endpoints.MapHub<SystemNotificationHub>("/systemNotificationHub");
endpoints.MapHub<QuotationHub>("/quotationHub");
quotationChat.js
$(function () {
if (connection === null) {
connection = new signalR.HubConnectionBuilder()
.withUrl("/quotationHub")
.build();
connection.start().then(function () {
document.getElementById('sendButton').onclick = function () {
connection.invoke("BroadcastFromClient")
.catch(function (err) {
return console.error(err.toString());
});
};
});
}
});
notification.js
$(function () {
if (connection === null) {
connection = new signalR.HubConnectionBuilder()
.withUrl("/systemNotificationHub")
.build();
connection.on("Notify", function (response) {
});
connection.on("HubError", function (response) {
alert(response.error);
});
connection.start().then(function () {
connection.invoke("NotificationMethod")
.catch(function (err) {
return console.error(err.toString());
});
});
}
});
据我所知,这个问题与你代码中的 if 条件有关。
您在创建连接构建器之前检查过连接是否为空。但是两个js都使用相同的连接模型
为了解决这个问题,我建议您可以尝试为 systemNotificationHub 创建一个新连接,例如 connection1,这样您的代码就可以正常工作了。
更多详情,您可以参考以下代码:
quotationChat.js 未更改。
notification.js:
//Define a new connection1 as the new js object as connection
$(function () {
if (connection1 === null) {
connection1 = new signalR.HubConnectionBuilder()
.withUrl("/systemNotificationHub")
.build();
connection1.on("Notify", function (response) {
});
connection1.on("HubError", function (response) {
alert(response.error);
});
connection1.start().then(function () {
connection.invoke("NotificationMethod")
.catch(function (err) {
return console.error(err.toString());
});
});
}
});