我正在寻找人们在实现服务客户端TCP(或UDP)请求的服务器应用程序时使用的任何策略:设计模式,实现技术,最佳实践等.
我们假设为了这个问题的目的,请求是相对长寿的(几分钟),并且流量是时间敏感的,因此在响应消息时没有可接受的延迟.此外,我们既处理来自客户端的请求,又将自己的连接发送到其他服务器.
我的平台是.NET,但由于底层技术与平台无关,我很有兴趣看到任何语言的答案.
现代方法是利用操作系统为您复用许多网络套接字,将您的应用程序释放为仅处理与流量的活动连接.
无论何时打开套接字,它都会将其与选择器相关联.您使用单个线程轮询该选择器.每当数据到达时,选择器将指示活动的套接字,将该操作移交给子线程并继续轮询.
这样,每个并发操作只需要一个线程.打开但空闲的套接字不会占用线程.
使用select()和poll()方法
使用Java NIO构建高度可扩展的服务器