C++->network设计
来源:互联网 发布:天尚网络机顶盒价格 编辑:程序博客网 时间:2024/06/06 16:54
现行开发的软件中,基本没有啥是不联网的。连一个小小的游戏,也要联网,去下载点广告什么的。那么网络层的是不是可以有很多东西可以重用的呢?
本人之前在一个游戏公司做服务器端开发。有一个网络架构是这样设计的。
网络使用了IO复用模型select。当然,对于现在的服务器,可以使用epoll代替。
一个Opcodes类,类成员都是静态的常量,用于表示与服务器通信的操作码。我们称它们为协议号。对于每一个操作,都会有一个协议号对应。比如客户端登录,客户端发给服务器进验证,使用一个CSLOGIN的常量表示。服务器验证后,将结果返回,可以使用一个SCLOGIN的常量表示。等等。
一个Optable类。这个类使用一std::map来记录每一个协议号的操作。map中的first value是协议号,second value是对应协议的处理逻辑回调函数。这个类应该设计成单例的。在main函数中,进行网络通信之前应该将这个单例中的map设计好,即将所有的协议号和回调函数insert到map中。这里还有一点要求,就是回调函数的声明必须是一样 ,不然map就定义不了。所以,回调函数可以设计成void (*)(unsigned char*)这样结构。因为收到的消息也是字节流。先从流中解析出包的长度,再解析出该长度的消息。当然,为了方便处理,还可以封装多一层函数,这个函数的功能是这样的:我们定义协议的时候,会要求将什么参数传到网络中去,比如将用户名和密码发给服务器,那么就会参数就会是这样string name, string password。这样就可以在回调函数中调用相应的这个函数,而这个函数应该由子类去重写其对应的业务逻辑。那这些业务逻辑应该放在哪里呢?下面讨论。
设计一个Receiver类,让要进行接收消息的端去继承这个类。比如,服务器可以有一个用于监听连接的类,然后这个类的函数监听到一个连接,然后将这个连接new一个新的对象,而这个对象所对应的类应该继承Receiver类,这样就可以去重写上面所说的方法了。
整理一下逻辑(以服务器为例):
- 服务器收到包,发给对应的处理对象。
- 解析出协议号。
- 在optable中根据协议号找出处理函数。
- 处理函数调用重写的业务逻辑函数进行处理。
- C++->network设计
- network.c
- Event & Network 设计思考
- C - Arctic Network
- best c/c++ network library
- codeforces-702C-Cellular Network
- CF 702C Cellular Network
- codeforces 702C Cellular Network
- codeforces 702C Cellular Network
- C, C++, Network编程经典书籍
- C, C++, Network编程经典书籍
- Summarize of network protocol in c
- C - Wireless Network(8.4.2)
- Deep Belief Network(DBN)的实现(c++)
- WebLogic(12C)—NetWork Channel
- Educational Codeforces Round 15 C. Cellular Network
- 【CodeForces】702C - Cellular Network(二分)
- 【Codeforces】-702C-Cellular Network(二分)
- oracle9i日常维护之undo表空间切换
- fix graphviz install problem in macbook
- 导出 C/C++ API 给 Lua 使用
- 关于"wincup.exe"与"aukld.exe"的分析
- vs2013无法创建c++工程之解决方法
- C++->network设计
- Ubuntu 默认启动到命令行 12.04
- 人生如棋
- js/jquery写的一个定制对话框控件
- 解决在DHCP环境下私自指定ip和私自搭建dhcp服务器的方法
- 无法打开包含文件:“fstream.h”
- ASP函数_转换格林威治时间函数
- lucene给文本索引和搜索功能的应用
- 程序员的性格