网络通信-队列处理线程/任务还是?

时间:2019-05-10 07:44:12

标签: c# multithreading backgroundworker

我有一个应用程序正在通过套接字从不同的线程发送消息。我为套接字创建了自己的包装器,使我能够扩展功能。

  • 在新的SocketConnection()上,它仅基于IP和端口返回一个实例。因此,如果某个其他线程每次尝试创建IP 1.1.1.1和端口1000的实例(如果该实例已经存在),都将创建该实例。 (一个设备的单个实例。)

  • 自动连接

  • 用于连接等的状态机。

每个唯一实例都有一个发送消息队列(来自更高版本的应用程序),并且有一个任务/线程正在循环中运行,并检查队列中是否有要发送的东西,然后处理socket.send(如果队列不是空)。发送成功或失败后,请使用回调将消息添加到队列的过程进行响应。

我不确定对于每个唯一实例在循环中运行的Task / Thread,这是否是一个好的解决方案。想象一下,我有100个端点设备(机器),而我的应用程序是从不同的线程向这些设备发送数据的。

如果我有100个要与之通信的设备,那么我将有100个唯一的实例,其中100个线程/任务在循环和处理队列中运行。

App会使用IP 1.1.1.1端口70向这些设备之一生成一个(例如,从不同的上层线程发送的50个请求)到目标设备。此IP的唯一类将其添加到消息队列和线程循环在这种情况下,将逐个处理这些消息。如果socket.send()正常或失败,上级只会获取回调。

这是处理多个连接的好方法吗?我从设备接收响应的方式相同。 (设备是服务器。)

我现在所知道的是,在每个实例中,使用create new thread比使用Task for loops更快。使用计时器中断会更好吗?还是处理传入通信的最佳方法是什么?

有什么模式可以做到吗?

0 个答案:

没有答案