好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

开源一个网络框架

开源一个网络框架

前面有几篇文章介绍过一个基于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测试程序:

#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

 

分类:  网络程序

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于开源一个网络框架的详细内容...

  阅读:45次