向几个netcore客户端应用程序广播消息的最佳方法是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向几个netcore客户端应用程序广播消息的最佳方法是什么?相关的知识,希望对你有一定的参考价值。

我需要将json消息同时发送到一千个dotnet核心应用程序到同一个网络。目前我使用rest web api和自托管的kestrel服务器,我问我这是否是最好的解决方案。是否存在针对dotnet核心应用程序或其他解决方案的自托管消息代理?

答案

您可以使用Service Top with Topic。您可以将消息发送到一个主题,并将N应用程序订阅到该主题以接收消息。

每个应用程序都可以在主题下拥有自己的订阅有关如何创建主题和订阅的更多信息,请访问here

您可以使用Service Bus Explorer进行本地调试并查看消息。

另一答案

我会选择signalR

定义你的Hub

using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;

namespace SignalRChat.Hubs
{
    public class ChatHub : Hub
    {
       public async Task SendMessage(string user, string message)
       {
          await Clients.All.SendAsync("ReceiveMessage", user, message);
       }
    }
}

StartUp添加SignalR

 services.AddSignalR();

 app.UseSignalR(routes =>
 {
      routes.MapHub<ChatHub>("/chatHub");
 });     

然后定义客户端(不要忘记包含js库qazxsw poi)

signalr.js

"use strict"; var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build(); //Disable send button until connection is established document.getElementById("sendButton").disabled = true; connection.on("ReceiveMessage", function (user, message) { var msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;"); var encodedMsg = user + " says " + msg; var li = document.createElement("li"); li.textContent = encodedMsg; document.getElementById("messagesList").appendChild(li); }); connection.start().then(function(){ document.getElementById("sendButton").disabled = false; }).catch(function (err) { return console.error(err.toString()); }); document.getElementById("sendButton").addEventListener("click", function (event) { var user = document.getElementById("userInput").value; var message = document.getElementById("messageInput").value; connection.invoke("SendMessage", user, message).catch(function (err) { return console.error(err.toString()); }); event.preventDefault(); }); 在Hub中定义为方法,服务器将监听它。 SendMessage是客户端的监听器,用于显示服务器发送的内容。

来自ReceiveMessage的所有代码

以上是关于向几个netcore客户端应用程序广播消息的最佳方法是什么?的主要内容,如果未能解决你的问题,请参考以下文章

进程间通信/广播

发送公共消息,包括发送方 Socket.io

如何在 UDP 广播中处理同时作为发送方和接收方的客户端

社交网络场景中的 Azure 通知中心最佳实践

讨论:使用 node.js / socket.io 实现聊天室的最佳方式?

Asp.Net:将数据从 WCF 服务广播到 Asp.Net 客户端的最佳方式