我正在尝试理解TCP中的多线程,因此我编写了一个基本的telnet文本“router”。
使用ReadLine()
每个线程使用TCP侦听器将等待来自telnet客户端的输入,然后根据发送的文本进行响应。我有多个线程和多个telnet客户端。
我想有条件地向所有线程发送消息。
例如,如果从任何一个线程发送的文本是“警告!”然后我希望连接客户端的每个线程都执行WriteLine("Alert!")
这有意义吗? 我的问题是我不知道如何让一个线程在另一个线程中引发一个事件。
答案 0 :(得分:1)
您需要查看Event Broker模式。基本上你会有一个对象,其中包含所有线程订阅的事件。它还将有一个可以调用的方法来调用该事件。这可能听起来很复杂,但相当简单。
答案 1 :(得分:0)
不要将线程视为数据。将它们视为构造。
显然,如果A类在B类中引发一个事件,B必须引用A并订阅它的事件。
但说实话,我认为你的做法是错误的。有一个TCP侦听器。当有消息进入时,您将获得一个Web请求对象,您可以在其自己的线程中进行处理。处理线程时,如果找到“Alert”字样,则向更高级别的类生成事件。然后处理事件并做任何需要做的事情。示例架构:
Manager实例化TcpHandler并订阅其AlertReceived事件。 TcpHandler实例化MessageProcessor并订阅其MessageReceived事件。
当TcpHandler从其TcpListener对象中读取内容时,触发MessageProcessor类并让它读取另一个线程上的实际数据。
触发MessageReceived事件。然后在TcpHandler类中处理事件。如果收到的数据是“警报”,则触发AlertReceived事件。
Manager类将捕获事件并执行您想要的任何其他操作。