开发网络服务器有哪些不同的方法? 所以我猜有(1)多线程(2)事件循环,还有什么吗?每种方法的优缺点是什么?你什么时候用?你能列出每个方法的特定impl'
答案 0 :(得分:4)
不同的方法可以是:
单线程:所有连接都由一个线程处理 "监听" for和等待连接和处理请求。它 很容易实现,但它是最无用的服务器 只能一次提出请求
多线程:服务器侦听请求和每个传入 请求被分配给一个新的线程来处理它。所以每个客户端 连接由其专用线程处理。这种方法(不像 1)支持并发处理客户端请求但不支持 因为每个新请求在服务器上创建一个新线程,所以扩展得很好 这需要很多资源。最终服务器将会遇到一个 限
Multithreaded-Pools:与(2)相同的想法,但不是创建一个新的 线程来处理来自线程池的线程的每个传入请求 用的。即。创建线程并将其放在池中以供日后使用 重用。这可以很好地支持多个客户端请求和 这是标准方法。例如。 Tomcat就是这样的。
事件队列:每个传入的请求都被放入队列中 由后台线程处理请求队列。它是 非阻塞和这种类型的异步处理也可以扩展 好吧。老实说,我不确定它是否比(3)更好 我认为tomcat可以使用这个配置 NIO架构
答案 1 :(得分:0)
您应该添加非阻塞I / O.看看Netty。
答案 2 :(得分:0)
某些服务器(如G-WAN)混合多线程池和事件队列,让服务器使用每个线程处理许多CPU内核连接。
Disclamer:我参与了这个项目的开发。