服务器接入系统实现碰到的问题

以tcpip为例。最早知道的服务方式是,为每个tcpip端口都提供一个线程进行服务器。不过在考虑到超过100个以上的连接,将会产生非常多的资源站中。

由于数据的特点是在同一时间并不是所有的会话都是活跃的,因此为每个会话提供一个专门服务的线程太过浪费。那么多个工作线程,一个通信处理线程将是很好的选择。

已有的tcpip除了select以外,就没有其他更好的办法。经过查找资料,在Windows下,iocp的编程模型,linux下的epoll编程模型,可以很好的监控端口的事件。当然还有其他平台下的编程接口,如kqueue,不过这次实现的主要针对Windows和linux平台,因此不考虑其他平台。

为了能够跨平台,需要将这两种平台的编程模型抽象为统一的接口。

在这个过程中,个人感觉linux的epoll模式相对来说更简单和直接。Windows模式下,需要考虑overlap编程架构,以及WSArecv的怪异调用方式。这两种方式类似RISC和CISC两种指令集的异同感觉。

今天先写到这里,下一次列出epoll和iocp结合后的抽象接口,重要代码以及针对Windows接口的意见。

posted @ 2012-07-02 22:18  惡盈好謙  阅读(144)  评论(0编辑  收藏  举报