课程目标:
- 培养计算机思维
- 能够理解别人的代码
- 理解计算机的限制
- 能把问题转化为计算机问题(像计算机科学家那样思考)
知识可以分为两类:
- 陈述式的知识: 例如2的平方根是1.4142…
- 程序性的知识: 例如平方根算法Babylonian method。
课程目标:
知识可以分为两类:
我一直想找一个简洁好用的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图就变这样了: