Java高性能服务器的设计思路总体来讲还是遵循reactor模式加上一个线程池来作为服务器对客户端请求的处理。我这里大体说一下一个服务器需要几个基本的组建。
1. 连接器
对一个客户端的封装,可以对SocketCannel包一层,也可以直接使用SocketCannel,看需求的复杂程度。建议还是包一层,这样有利于连接器的扩展,可以添加一些额外的参数或者功能。
2. 处理器
处理器中对持有一个连接器的实例,当一个请求过来时处理器会对请求的数据进行处理,然后可以放入另一个队列,也可以直接返回给客户端。
这里我自己的有一些思考,请求的数据包应该有一个标识位来标识应该被哪个一个处理器处理,服务器端有可能会有比同的处理器,处理不同的需求。
3. 线程池
一个处理器的执行应该提交给一个线程池当中。这样有助于资源的优化。
4. 协议
规定了服务器与客户端能够发送和接收的数据格式以及动作。一个功能也许需要几个动作才能够完成,那么这样就需要定义一个协议来约束有几个动作需要被实现。在java中协议往往是一个接口,服务器和客户端需要能够实现这个接口,细化一点可以定义服务器端协议和客户端协议。
5. 传输与序列化
可以定义个传输层来实现协议的细节以及数据序列化的细节。服务器端和客户端分别持有一个能够传输数据的对象。真正的传输数据的工作交给这一层来处理。
长连接可以在客户端使用一个心跳信号来实现,心跳的频率需要小于服务器端socket设置的timeout值。