免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6204 | 回复: 3
打印 上一主题 下一主题

[C++] EasyNetwork--Linux服务器开发框架介绍 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-14 15:16 |只看该作者 |倒序浏览
·       服务器开发需要做什么

1.   当然你需要了解/熟悉/甚至精通网络编程,socket等等,这是基础

2.   监听服务器端口

3.   接受连接请求,管理这些链接(包括创建,销毁等等)

4.   收/发协议数据.比如协议头编解码, 协议数据编解码(或者说序列化/反序列化).

5.   处理这些协议等(主要跟服务器的业务逻辑有关).

·       什么是框架

每个应用程序或者服务器server的开发, 都需要做一些基础的东西,然后再在这些基础的东西上完成业务逻辑层.可能每开发一个应用程序,你都需要重复做这些基础的东西. 比如客户端开发,你需要创建一个对话框.或许你会用win32的api来完成,但是你可以直接使用MFC来完成你的工作,因为那更快(可能也更可靠).你们MFC就是这样一个框架,帮你完成了底层的一些东西. 同样,服务端开发,你同样需要重复的做一些基础的东西:创建监听端口、接收连接请求、管理连接请求、sockket数据的读取,数据的编解码,数据的发送等等.或许你会考虑为这些过程开发响应的模块. 作为应用层,应该把精力集中在业务逻辑的处理上, 或许根本就不需要去考虑连接怎么创建,怎么处理;数据怎么接收,怎么发送;怎么编解码等等这些问题.由你开发的这些模块来完成.那么由这些模块组成的一个有机体,可以称为框架吧.

·       什么是EasyNetwork网络开发框架

EasyNetWork网络开发框架,就是能够帮你完成创建连接,管理连接,完成数据收发,编解码的一个开发框架.只要实现框架的接口, 就可以接收协议请求,发送协议,能够让你集中于业务逻辑的开发.

·       EasyNetwork框架扩展性如何

EasyNetWork是可扩展的, 只要继承响应模块,并实现接口方法,就可以实现扩展.如IODemuxer, 你可以封装libevent来实现.如Protocol, 应用层可以封装自己的协议格式等.

·       EasyNetwork怎么管理连接

EasyNetWork由SocketManager模块来管理连接.

·       EasyNetwork什么时候收/发数据

EasyNetwork有IODemuxer模块来触发socket的读、写、超时、错误事件.并通过EventHandler回调类响应这些事件.当事件发送时,就可以进行数据的读写了. 目前EasyNetwork用epoll实现了IODemuxer.

·       EasyNetwork怎么收发数据

当socket可读时,由TransSocket完成数据的读取.如trans_socket->recv_buffer(); 当socket可写时,由TransSocket完成数据的发送,如trans_socket->send_buffer();

·       EasyNetwork怎么编/解码(序列化/反序列化)数据

当socket读取到数据时. 通过trans_socket->get_recv_buffer()获取到数据缓冲区,然后利用protocol来对数据进行解码. 当需要发协议数据时, 由protocol来进行编码,然后把编码数据写入trans_socket的write_buffer中,进行发送数据.

·       EasyNetwork支持自定义协议格式吗

可以,继承并实现Protocol的方法.具体见StringProtocol例子

·       EasyNetwork怎么处理粘包现象

由于数据是存在trans_socket的IOBuffer中的,每次解码时从buffer中取出完整的数据进行解码,然后清掉这些完整的数据.如果buffer里面的数据不够一个完整的包,那么这些不完整的数据会留在IOBuffer中,直到收到完整的数据并被正确解码位置.

·       EasyNetwork怎么处理高并发要求

EasyNetwork实现了一个ConnectThread/ConnectThreadPool的多线程框架模型.当收到新的连接请求时,把新的连接分配到某个线程中去,由该线程处理此连接的数据. 应用server继承并实现ConnectThread/ConnectThreadPool相应的接口,即可完成该多线程模型.

·       EasyNetwork怎么处理高吞吐量要求

EasyNetwork不关心次要求, 当收到协议protocol之后, 通过应用层实现的接口函数on_receive_protocol()把protocol发给应用层, 由应用层来负责解决高吞吐量要求. 当然,应用层可以利用框架的Thread/ThreadPool来完成这个要求.

·       EasyNetwork内存管理与优化

面对高并发(如每秒成千上万的连接请求),高吞吐量的问题(如每秒收发成千上万甚至更多的协议数据).EasyNetwork需要对TransSocket,Protocol等做优化,以防止内存碎片的产生. 框架有MemManager模块完成内存的管理和优化.框架的Socket,Protocol等由MemManager产生和释放.

·       如何利用EasyNetwork框架搭建自己的服务器

服务器可以继承NetInterface完成一个单线程的server,也可以实现ConnectThread和ConnectThreadPool完成多线程的server.具体例子见AppServerSamples.

·       服务器框架自动化生成工具enetlib

EasyNetwork提供enetlib工具可以帮你快速的生成自己的框架类代码.


=======================
EasyNetwork系列文章见blog:  
easynetwork.blog.chinaunix.net

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2012-11-14 19:14 |只看该作者
一看多线程框架, 没意思了.

论坛徽章:
0
3 [报告]
发表于 2012-11-14 20:42 |只看该作者
呵呵。这帖子发的一点也不讲究,代码质量可想而知了

论坛徽章:
0
4 [报告]
发表于 2012-11-14 21:56 |只看该作者
呵呵, 是直接从blog/wiki里面的FQA贴过来的, 就没有重新排版了, 网页排版比较不在行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP