我正在寻找人们在实现为客户端 TCP(或 UDP)请求提供服务的服务器应用程序时使用的任何策略:设计模式、实现技术、最佳实践等。
为了这个问题的目的,我们假设请求的持续时间相对较长(几分钟)并且流量对时间敏感,因此在响应消息时没有延迟是可以接受的。此外,我们既为来自客户端的请求提供服务,也为我们自己建立与其他服务器的连接。
我的平台是 .NET,但由于无论平台如何,底层技术都是相同的,所以我有兴趣查看任何语言的答案。
最佳答案
现代方法是利用操作系统为您多路复用许多网络套接字,让您的应用程序能够仅处理有流量的事件连接。
无论何时打开一个套接字,它都会与一个选择器相关联。您使用单个线程来轮询该选择器。每当数据到达时,选择器将指示事件的套接字,您将该操作移交给子线程并继续轮询。
这样你只需要一个线程来处理每个并发操作。打开但空闲的套接字不会占用线程。
关于multithreading - 如何最小化 tcp 服务器应用程序中使用的线程数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32198/