服务器接入系统实现碰到的问题
以tcpip为例。最早知道的服务方式是,为每个tcpip端口都提供一个线程进行服务器。不过在考虑到超过100个以上的连接,将会产生非常多的资源站中。
由于数据的特点是在同一时间并不是所有的会话都是活跃的,因此为每个会话提供一个专门服务的线程太过浪费。那么多个工作线程,一个通信处理线程将是很好的选择。
已有的tcpip除了select以外,就没有其他更好的办法。经过查找资料,在Windows下,iocp的编程模型,linux下的epoll编程模型,可以很好的监控端口的事件。当然还有其他平台下的编程接口,如kqueue,不过这次实现的主要针对Windows和linux平台,因此不考虑其他平台。
为了能够跨平台,需要将这两种平台的编程模型抽象为统一的接口。
在这个过程中,个人感觉linux的epoll模式相对来说更简单和直接。Windows模式下,需要考虑overlap编程架构,以及WSArecv的怪异调用方式。这两种方式类似RISC和CISC两种指令集的异同感觉。
今天先写到这里,下一次列出epoll和iocp结合后的抽象接口,重要代码以及针对Windows接口的意见。