开源一个网络框架
2012-11-01 18:06
239 查看
前面有几篇文章介绍过一个基于linux epoll的网络接口,但并未将接口组合成一个方便使用的网络框架。
下面先简单介绍下以前发布过的网络接口:
首先是基本接口:
KendyNet.h KendyNet.c https://github.com/sniperHW/kendylib/blob/master/include/KendyNet.h
此接口提供了最简单的单线程网络收发模型,并未提供封包解包等功能,使用者可在此之上根据自己的需求封装出合适的网络框架
第二组接口在第一组接口上提供了封包和解包:
Connection.h Connectionc https://github.com/sniperHW/kendylib/blob/master/include/Connection.h
这个封装提供了一种比较高效的封包方式,(封包方式的介绍可参看前面的文章)如果使用者觉得这种封包方式可以满足需求,可在此之上
封装合适的网络框架.
最后,也就是本文介绍的主题,利用第二组接口封装出来的,网络与逻辑分离的多线程网络框架.
此框架的核心是一个消息队列,用于在网络层和逻辑层之间通信,网络层将接收到的数据包,网络事件(连接断开,新到连接)通过消息队列传送到逻辑层,
供逻辑层处理.逻辑层需要发送的数据,操作(主动关闭套接口)通过消息队列传送到网络层。所有线程之间的同步操作,基本上都围绕着消息队列,使用者
基本不用考虑锁问题。(关于消息队列的设计和效率,可以参考前一篇文章)
下面贴出简单的echo测试程序:
项目地址:https://github.com/sniperHW/kendylib/tree/master/netframework
下面先简单介绍下以前发布过的网络接口:
首先是基本接口:
KendyNet.h KendyNet.c https://github.com/sniperHW/kendylib/blob/master/include/KendyNet.h
此接口提供了最简单的单线程网络收发模型,并未提供封包解包等功能,使用者可在此之上根据自己的需求封装出合适的网络框架
第二组接口在第一组接口上提供了封包和解包:
Connection.h Connectionc https://github.com/sniperHW/kendylib/blob/master/include/Connection.h
这个封装提供了一种比较高效的封包方式,(封包方式的介绍可参看前面的文章)如果使用者觉得这种封包方式可以满足需求,可在此之上
封装合适的网络框架.
最后,也就是本文介绍的主题,利用第二组接口封装出来的,网络与逻辑分离的多线程网络框架.
此框架的核心是一个消息队列,用于在网络层和逻辑层之间通信,网络层将接收到的数据包,网络事件(连接断开,新到连接)通过消息队列传送到逻辑层,
供逻辑层处理.逻辑层需要发送的数据,操作(主动关闭套接口)通过消息队列传送到网络层。所有线程之间的同步操作,基本上都围绕着消息队列,使用者
基本不用考虑锁问题。(关于消息队列的设计和效率,可以参考前一篇文章)
下面贴出简单的echo测试程序:
#include "netservice.h" #include "msg_loop.h" #include "datasocket.h" #include "SysTime.h" int32_t count = 0; void server_process_packet(datasocket_t s,rpacket_t r) { wpacket_t w = wpacket_create_by_rpacket(NULL,r); data_send(s,w); } void process_new_connection(datasocket_t s) { ++count; printf("%d\n",count); } void process_connection_disconnect(datasocket_t s,int32_t reason) { release_datasocket(&s); --count; printf("%d\n",count); } const char *ip; uint32_t port; int main(int argc,char **argv) { init_system_time(10); ip = argv[1]; port = atoi(argv[2]); signal(SIGPIPE,SIG_IGN); init_mq_system(); init_clients(); if(InitNetSystem() != 0) { printf("Init error\n"); return 0; } netservice_t n = create_net_service(1);//创建一个网络服务框架,只使用一个网络线程 net_add_listener(n,ip,port); //添加监听 //创建主消息循环对象 msg_loop_t m = create_msg_loop(server_process_packet,process_new_connection,process_connection_disconnect); while(1) { //不断从消息队列中提取消息并处理 msg_loop_once(m,n,100); } return 0; }
项目地址:https://github.com/sniperHW/kendylib/tree/master/netframework
相关文章推荐
- Dorothy2:一个开源的僵尸网络分析框架
- 开源一个简易轻量的reactor网络框架
- 国内一个优秀的网络开源框架学习,轻量级网络框架学习NoHttp,可能是继Xutils之后的又一优秀框架
- 开源一个网络框架
- 从NSURLSession到AFNetworking再到自己封装一个网络框架
- Android——网络框架篇:OkHttpUtils一个专注于让网络请求更简单的框架
- android-downloader_一个带进度条的下载开源框架源码解析(雷惊风)
- android基于开源网络框架asychhttpclient,二次封装为通用网络请求组件
- 【安卓网络请求开源框架Volley源码解析系列】定制自己的Request请求及Volley框架源码剖析
- android 设计一个简易的Http网络请求框架
- 希望大家推荐一个javaweb开源框架
- Android 网络请求开源框架
- ASimpleCache 是一个为android制定的 轻量级的 开源缓存框架
- Android YapHttp开源个人轻量级网络框架
- 这次分享的是一个分布式的网络服务框架gylib
- X5开源框架的用法分享:一个app前端访问后端的实例 (适用于 X5_V3.0版本) by DoIt
- 一个用于网络摄像机的开源软件 --- mjpg-streamer
- quartz简单demo(一个简单易用的任务调度开源框架)
- python keras (一个超好用的神经网络框架)的使用以及实例
- 任务驱动,对比式学习.NET开发系列之开篇------开源2个小框架(一个Winform框架,一个Web框架)