网络通信服务器小型框架

  • 网络通信服务器
    • N线程对N客户端
    • 事件分发
    • 参考开源库方案

网络通信服务器

N线程对N客户端

原理

ClientServerThreadN(client)connectclientread writecloseClientServerThreadN(client)
SocketServer server(port)
while(true)client=server.accept()new Thread(client).start()
Thrad:client
::run() read(client)write(client)if(client.closed())SocketServer.post(close, client)

事件分发

ClientServerPoll(client)ReadWriteClose(client)connectAppend clientevent POLLINread handleevent POLLOUTwrite handleclient closeclosecloseClientServerPoll(client)ReadWriteClose(client)
defineAndType out   List<data>   // 定义out的类型为List<data> 列表(队列)
define Client[fd,out, time(lastRx, lastWr), List<data> rmsg; ]   //定义客户端类型 fd 为socket 文件句柄, out为发送队列, time为时间
List<Client> clients    //客户端列表
ServerSocket server(port)  //Socket服务器初始化
Pollfds.add(server.fd)   //Pollfds事件选择器,添加服务器句柄
while(true)pollfds.setClientfd(clients.fd)  //为事件选择器添加所有的客户端句柄for client->clientspollfds[client.fd].event = POLLIN   //设定此客户端有可读事件if(client.out.length>0)pollfds[client.fd].event |= POLLOUT  //设定有可写事件pollfds.poll(timeout)   //poll等待句柄列表产生事件, eventv表示poll产生的结果if(server.fd.eventv == POLLIN)   //如果产生输入事件是服务器句柄client= server.accept()    //接受一个客户端clients.append(client)   //将客户端添加到客户端列表for( client: clients)   //遍历客户端if(client. eventv&POLLIN)   //如果客户端有数据上来就读client.rmsg <- client.read()   //从客户端读数据handleAsync(client, client.rmsg)  //异步处理消息if(client.eventv&POLLOUT) //如果客户端可以写if(client.out.length ==0)    client.write("心跳"), continue;client.write(client.out.pop()) //从客户端的输入数据队列中取数据if(client.eventv&POLLERR)client.close()  //客户端断开了//发送消息到客户端
func clientout(client, msg)client.out<-msgclient.pollfds.setevent(EOUT) //发送事件,退出poll等待##
1>怎么添加心跳?  在 client.out.length>0判断时,判断最后接收数据的时间比较,增加POLLOUT
2>怎么异步发数据?a,增加一个文件句柄,如pipe(fdR,fdW) ,把fdR添加到 pollfds ,设定为POLLINb,想发送数据时  client.out.append(data..); c, write->fdW  这样poll() 就能返回,则client.out.length>0,就会到其POLLOUT事件下发数据3>给poll() 添加延时任务,以及自定义事件驱动struct timeval  {   tv_sec;  tv_usec; } 使用u微妙为单位当超时后去延时任务列表寻找到时间的 回调函数和回调参数;
##

参考开源库方案

mosquito MQTT服务器的 loop.c
Live555 TaskScheduler.cpp 模型
libwebsockets 模型
java-netty框架

网络通信服务器小型框架相关推荐

  1. 网络与服务器编程框架库 acl_3.0.13 发布

    2019独角兽企业重金招聘Python工程师标准>>> acl 3.0.13 版本 (项目主页:https://sourceforge.net/projects/acl/,技术文章主 ...

  2. 网络与服务器编程框架库 acl_3.0.12 发布

    2019独角兽企业重金招聘Python工程师标准>>> acl 3.0.12 版本 (项目主页:https://sourceforge.net/projects/acl/,  技术文 ...

  3. Python 异步 ASGI 服务器及框架

    ASGI 在 Python3.5 之后增加 async/await 特性之后,异步编程变得异常火爆,越来越多开发者投入异步的怀抱. 直到最近,Python 仍缺乏用于 asyncio 框架的最低限度的 ...

  4. 【 C++ 技术】 C++ 高性能服务器网络框架设计细节

    作者:范蠡  原文:C++ 高性能服务器网络框架设计细节 前言 这篇文章我们将介绍服务器的开发,并从多个方面探究如何开发一款高性能高并发的服务器程序.需要注意的是一般大型服务器,其复杂程度在于其业务, ...

  5. 游戏程序设计 # ch13 开发工具 # 开发语言、开发环境、腾讯开发组件、网络通信和业务框架介绍

    第十三章 开发工具 1 开发语言 2 开发环境 3 腾讯开发组件介绍 4 网络通信+业务框架介绍 第一节 开发语言 腾讯服务器主要使用的语言是C/C++ 第二节 开发环境 (指:客户端) 第三节 腾讯 ...

  6. 高性能服务器程序框架

    服务器解构为三个主要模块: IO处理单元.四种IO模型和两种高效事件处理模式. 逻辑单元.两种高效并发模式. 存储单元.(暂不讨论) 1.服务器模型 (1)C/S (客户端/服务器)模型 C/S模型的 ...

  7. Linux网络编程—Day11 高性能服务器程序框架

    按照服务器程序的一般原理,讲服务器结构为如下三个主要模块: I/O处理单元 逻辑单元 存储单元 服务器模型 第一种:C/S模型 TCP/IP协议在设计和实现上并没有客户端和服务器的概念,在通信 过程中 ...

  8. linux socket高性能服务器处理框架

    这个博客很多东西 http://blog.csdn.net/luozhonghua2014/article/details/37041765 思考一种高性能的服务器处理框架 1.首先需要一个内存池,目 ...

  9. 利用PHP语言开发手机app后台服务器的框架是什么?或者说开发流程是怎么样的?

    最近正在做一个手机APP的服务端API开发,虽然是基于Ruby on Rails的,做的也不太专业,不过大致相通,希望能够给你一些启发. 首先,如果是比较简单的手机APP,例如新闻客户端这样的 不会涉 ...

最新文章

  1. c语言链表最高响应比优先,操作系统--最高响应比优先调度算法实验报告..doc
  2. webSocket详解
  3. Notepad2 一个很不错的记事本
  4. 读书笔记 effective c++ Item 18 使接口容易被正确使用,不容易被误用
  5. 如何建立一个数据分析团队?
  6. h.264 视频解码的一点小经验(ffmpeg)
  7. 发现大数据产业创新黑马,CBDS2016大数据双创路演火热召集
  8. Python-web框架 fastapi
  9. Selenium IDE 下载及安装
  10. Oracle imp 导入dmp文件到数据库
  11. 【ERP】概念_总账系统、记账、往来科目
  12. 小程序scroll-view文字不能自动换行
  13. 利用python提取企查查企业的工商基本信息
  14. 一个几乎对英语零基础的人,该如何有效,且高效的学习英语?
  15. dell emc isilon解决添加AD域后有时间不同步警告
  16. c语言收银系统程序编码,C语言 超市收银系统.doc
  17. UC Berkeley AI Project -MindsDB 学习
  18. jquery easyui中文培训文档
  19. 用 pandas 实现真实的Vlookup
  20. 魔改车钥匙实现远程控车:(1)整体思路及控制方案实现

热门文章

  1. 行走的励志君——穷的时候需要记住的4点
  2. js中this指向问题总结
  3. 8145v5 参数_vivoX30(8GB128GB5G版)、努比亚Play(8GB256GB5G版)参数报价对比
  4. 华为荣耀更新后为什么没有计算机,荣耀7x为什么用华为助手联不上电脑?
  5. 互联网晚报 | 450个小城市超9成房价不过万元;巴奴火锅创始人再回应“9元5片土豆”;华兴资本控股:控股股东包凡目前正配合调查...
  6. vue左侧悬浮_vue实现移动端悬浮窗效果
  7. 小程序适配全面屏机型
  8. 解决PTA题:帅到没朋友
  9. 利用python制作word成绩报告
  10. 今年即将发布的新iPhone不支持5G?外媒:2020年以后再说