简单网络库SimpleNet

我一直想找一个简洁好用的C++网络库,看了一些有名的库比如:POCO、libevent、C++ Socket Libary、ZMQ、Etwork、Boost的ASIO,要么太复杂难用要么功能太少。我实在不行就自己仿照Etwork写了一个取名SimpleNet,只实现了简单的TCP服务器和客户端功能,简洁就是美啊:)。

话说网络库看多了也就那么回事,如果不考虑性能之类而且只实现基本功能的话,也就是操作Socket、listen、bind,然后Select死循环,如果考虑异步的话加个线程搞定。但实际实现起来的话也要考虑很多细节问题。

首先当然是网络模型,在Windows下那就是Select了,话说IOCP这货估计很难搞定(libenvent好像还不支持)。

接下来就是怎么管理连接Session了,如果每个Session都开个线程的话互相通信起来比较麻烦,适合于提供单独的服务(例如HTTP服务器)。这里就直接搞个Map由Session管理器管理。

看到Etwork上的Session扩展是通过Notify类接口实现,这个具体应用其他估计很麻烦不如直接扩展Session来到快。创建Session就用那个工厂方法,顺便复习一下设计模式,最后出来的UML图就变这样了:



代码在Google Code的trunkProjectSimpleNet下Code,附带了一个SimpleNet实现的聊天室实现:)。