Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TcpClient-我可以用什么替换它?_C#_Sockets_Tcp - Fatal编程技术网

C# TcpClient-我可以用什么替换它?

C# TcpClient-我可以用什么替换它?,c#,sockets,tcp,C#,Sockets,Tcp,我们有一个客户机-服务器应用程序,其中所有客户机也通过TCP相互通信(每个客户机上的TcpClient+TcpListener) 所以,当客户端A做某事时,它向客户端B、C和D发送消息,然后等待响应。对于许多客户机(比如现在的20个客户机)来说,这个get有点慢,特别是当clienb死亡时——客户机A等待直到超时 有没有更好的方法可以同时向所有人播放这个节目包?我知道每个人的主持人姓名等 我只需要发送消息,并知道他们是否成功接收到消息 我的选择是什么?我建议完全关闭该策略,并使用一些消息总线,以

我们有一个客户机-服务器应用程序,其中所有客户机也通过TCP相互通信(每个客户机上的TcpClient+TcpListener)

所以,当客户端A做某事时,它向客户端B、C和D发送消息,然后等待响应。对于许多客户机(比如现在的20个客户机)来说,这个get有点慢,特别是当clienb死亡时——客户机A等待直到超时

有没有更好的方法可以同时向所有人播放这个节目包?我知道每个人的主持人姓名等

我只需要发送消息,并知道他们是否成功接收到消息


我的选择是什么?

我建议完全关闭该策略,并使用一些消息总线,以可靠和性能优化的方式执行此操作。我很高兴,即使它是用Java实现的。如果你想要纯.NET的东西,可以看看或。我知道,您可能觉得在客户机之间发送消息的任务很简单,您可以自己完成,如果您想在生产中做到可靠,最好利用其他人的努力并放松自己。当应用程序在客户站点上运行时,试图解决通信错误将非常令人沮丧。如果您正在编写竞争对手消息总线,请忽略此项,当然:)
所有这些解决方案都允许您通过阅读文档来完成工作。在替换生产代码之前,先进行一些“体外”测试应用程序,以获得必要的信心,然后替换硬TcpClient。我敢肯定,您可以找到一个截断点来隔离消息数据报,将新策略放在其中。

您可以使用多播协议,只需向您的组发送一个数据包。

如果所有客户端都运行Windows,您可以使用MSMQ,它是操作系统的(可选)一部分。@Colin Desmond是的,这是真的,但是MSMQ队列只是fifo,您需要一些努力来创建一个调度策略(广播),我明白您的意思。此时,应用程序操作系统仅处于支持模式,因此更改应该是最小的。我绝对不想再添加服务器基础设施。如果更改应该是最小的,我不会尝试替换TcpClient。这听起来像是一个重大的变化。@katit我同意Patrik的观点,甚至从Tcp改为semthing。否则这是一个有影响的变化,也许我建议的变化影响较小。你能给我更多关于多播协议的详细信息,也许还有一些.NET示例吗?