网络通信服务器小型框架
网络通信服务器小型框架
- 网络通信服务器
- N线程对N客户端
- 事件分发
- 参考开源库方案
网络通信服务器
N线程对N客户端
原理
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)
事件分发
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框架
网络通信服务器小型框架相关推荐
- 网络与服务器编程框架库 acl_3.0.13 发布
2019独角兽企业重金招聘Python工程师标准>>> acl 3.0.13 版本 (项目主页:https://sourceforge.net/projects/acl/,技术文章主 ...
- 网络与服务器编程框架库 acl_3.0.12 发布
2019独角兽企业重金招聘Python工程师标准>>> acl 3.0.12 版本 (项目主页:https://sourceforge.net/projects/acl/, 技术文 ...
- Python 异步 ASGI 服务器及框架
ASGI 在 Python3.5 之后增加 async/await 特性之后,异步编程变得异常火爆,越来越多开发者投入异步的怀抱. 直到最近,Python 仍缺乏用于 asyncio 框架的最低限度的 ...
- 【 C++ 技术】 C++ 高性能服务器网络框架设计细节
作者:范蠡 原文:C++ 高性能服务器网络框架设计细节 前言 这篇文章我们将介绍服务器的开发,并从多个方面探究如何开发一款高性能高并发的服务器程序.需要注意的是一般大型服务器,其复杂程度在于其业务, ...
- 游戏程序设计 # ch13 开发工具 # 开发语言、开发环境、腾讯开发组件、网络通信和业务框架介绍
第十三章 开发工具 1 开发语言 2 开发环境 3 腾讯开发组件介绍 4 网络通信+业务框架介绍 第一节 开发语言 腾讯服务器主要使用的语言是C/C++ 第二节 开发环境 (指:客户端) 第三节 腾讯 ...
- 高性能服务器程序框架
服务器解构为三个主要模块: IO处理单元.四种IO模型和两种高效事件处理模式. 逻辑单元.两种高效并发模式. 存储单元.(暂不讨论) 1.服务器模型 (1)C/S (客户端/服务器)模型 C/S模型的 ...
- Linux网络编程—Day11 高性能服务器程序框架
按照服务器程序的一般原理,讲服务器结构为如下三个主要模块: I/O处理单元 逻辑单元 存储单元 服务器模型 第一种:C/S模型 TCP/IP协议在设计和实现上并没有客户端和服务器的概念,在通信 过程中 ...
- linux socket高性能服务器处理框架
这个博客很多东西 http://blog.csdn.net/luozhonghua2014/article/details/37041765 思考一种高性能的服务器处理框架 1.首先需要一个内存池,目 ...
- 利用PHP语言开发手机app后台服务器的框架是什么?或者说开发流程是怎么样的?
最近正在做一个手机APP的服务端API开发,虽然是基于Ruby on Rails的,做的也不太专业,不过大致相通,希望能够给你一些启发. 首先,如果是比较简单的手机APP,例如新闻客户端这样的 不会涉 ...
最新文章
- c语言链表最高响应比优先,操作系统--最高响应比优先调度算法实验报告..doc
- webSocket详解
- Notepad2 一个很不错的记事本
- 读书笔记 effective c++ Item 18 使接口容易被正确使用,不容易被误用
- 如何建立一个数据分析团队?
- h.264 视频解码的一点小经验(ffmpeg)
- 发现大数据产业创新黑马,CBDS2016大数据双创路演火热召集
- Python-web框架 fastapi
- Selenium IDE 下载及安装
- Oracle imp 导入dmp文件到数据库
- 【ERP】概念_总账系统、记账、往来科目
- 小程序scroll-view文字不能自动换行
- 利用python提取企查查企业的工商基本信息
- 一个几乎对英语零基础的人,该如何有效,且高效的学习英语?
- dell emc isilon解决添加AD域后有时间不同步警告
- c语言收银系统程序编码,C语言 超市收银系统.doc
- UC Berkeley AI Project -MindsDB 学习
- jquery easyui中文培训文档
- 用 pandas 实现真实的Vlookup
- 魔改车钥匙实现远程控车:(1)整体思路及控制方案实现
热门文章
- 行走的励志君——穷的时候需要记住的4点
- js中this指向问题总结
- 8145v5 参数_vivoX30(8GB128GB5G版)、努比亚Play(8GB256GB5G版)参数报价对比
- 华为荣耀更新后为什么没有计算机,荣耀7x为什么用华为助手联不上电脑?
- 互联网晚报 | 450个小城市超9成房价不过万元;巴奴火锅创始人再回应“9元5片土豆”;华兴资本控股:控股股东包凡目前正配合调查...
- vue左侧悬浮_vue实现移动端悬浮窗效果
- 小程序适配全面屏机型
- 解决PTA题:帅到没朋友
- 利用python制作word成绩报告
- 今年即将发布的新iPhone不支持5G?外媒:2020年以后再说