当前位置: 首页 > news >正文

河南网站制作公司个人备案网站名称怎么写

河南网站制作公司,个人备案网站名称怎么写,wordpress是不是cms,山东专业的网站建设1.介绍 个人实现的c开源网络库#xff0e; 2.软件架构 1.结构图 2.基于event的自动分发机制 3.多优先级分发队列#xff0c;延迟分发队列 内部event服务于通知机制的优先级为0#xff0c;外部event优先级为1#xff0e; 当集中处理分发的event_callback时#xff0c…1.介绍 个人实现的c开源网络库 2.软件架构 1.结构图 2.基于event的自动分发机制 3.多优先级分发队列延迟分发队列 内部event服务于通知机制的优先级为0外部event优先级为1 当集中处理分发的event_callback时若激活了更高优先级的event_callback可在当前event_callback回调处理结束进入下次时间循环以便高优先级event_callback及时得到处理 4.主动分发event_callback来向工作线程提交回调任务 5.通信对象的高效缓存区管理 5.1.以携带管理信息的可变尺寸块作为基础缓存单位 5.2.以可变尺寸块的链式队列构成的缓存区 5.3.块的可复用 对由于消耗而需释放的块采用缓存而非释放来管理 释放块时候依据块容量释放到缓存指定容量下块的容器 需要新块时依据所需容量先从缓存取块取不到时再动态分配新的块 5.4.连接对象的连接管理 采用一个互斥锁实现连接对象上连接建立过程连接断开过程至多只有一个并发 a. 连接过程 b.断开过程 c.断开投递快速响应 设置手动分发event_callback的优先级为0借助event_callback的多优先级分发队列可使得当前event_callback回调处理结束即可开始下轮循环从而快速处理分发的高优先级的event_callback 5.5.连接对象高效锁管理 a. 通过连接锁实现连接建立连接断开的串行化 b. 可读事件处理收包回调无锁处理 因为可读事件及收包回调只在单个工作线程引发且通过连接建立连接断开的串行化处理收包过程及其回调可以实现为无锁的 c. 通过发送锁实现发送缓存区并发管理 用户线程执行发送工作线程可写事件执行异步发送分别充当了发送缓存的生产者消费者我们用发送互斥锁进行并发管理 5.6.高效的io复用 a. 采用epoll作为io复用器其比selectpoll在管理大规模事件监控时性能更优异 b. 只在必要时注册连接对象可写event到event_base b.1. 连接建立过程我们将其注册到event_base以便实现连接结果异步处理 b.2. 用户线程向发送缓存写入新数据时我们将其注册到event_base以便实现数据在可写事件中的异步发送 b.3. 在异步发送里判断发送缓存为空时自动移除可写event以便减少不必要的事件分发 5.7.简单易用 a. 以c实现 b. 以工厂模式管理资源 c. 接口定义清晰详见使用说明 系统要求 1.支持c11 2.支持cmake 3.linux系统 安装教程 1.在mynet/build下执行cmake ../ 2.在mynet/build下执行make 3.在mynet/build/demo下执行./srv_test开启服务端 4.在mynet/build/demo下执行./cli_test开启客户端 使用说明 1.客户端demo #include ifactory.h #include ilog.h #include iclient.h #include define.h #include stdio.h #include stdlib.h #include string.h #include thread #include chrono #include mutex #include iostream #include fstream #include endian.hstd::mutex mtx; std::ofstream logFile(cli_logfile.txt, std::ios_base::out); void logcb(mynet::LOGLEVEL nLevel, const char *msg){//if(nLevel mynet::LOGLEVEL::EVENT_LOG_ERR){pthread_t thread_id pthread_self(); std::lock_guardstd::mutex lock(mtx); logFile tid: (uint32_t)thread_id level: (int32_t)nLevel : msg: msg std::endl; //} }struct Msg1{int32_t nLen;int32_t nType;int32_t nMsg1;char strName[100];Msg1(){nLen CalculateSize();nType 1;}static int32_t CalculateSize(){return 112;}void Serialize(char* lpOut){int32_t nTmpLen htobe32(nLen);memcpy(lpOut, (char*)nTmpLen, 4);int32_t nTmpType htobe32(nType);memcpy(lpOut4, (char*)nTmpType, 4);int32_t nMsg htobe32(nMsg1);memcpy(lpOut8, (char*)nMsg, 4);memcpy(lpOut12, strName, 100);}Msg1* DeSerialize(char* lpIn){Msg1* lpM new Msg1();int32_t nTmpLen *(int32_t*)lpIn;lpM-nLen be32toh(nTmpLen);int32_t nTmpType *(int32_t*)((char*)lpIn4);lpM-nType be32toh(nTmpType);int32_t nMsg *(int32_t*)(lpIn8);lpM-nMsg1 be32toh(nMsg);memcpy(lpM-strName, lpIn12, 100);return lpM;} }; struct Msg2{int32_t nLen;int32_t nType;int32_t nMsg2;char strName1[100];char strName2[100];Msg2(){nLen CalculateSize();nType 2;}static int32_t CalculateSize(){return 212;}void Serialize(char* lpOut){int32_t nTmpLen htobe32(nLen);memcpy(lpOut, (char*)nTmpLen, 4);int32_t nTmpType htobe32(nType);memcpy(lpOut4, (char*)nTmpType, 4);int32_t nMsg htobe32(nMsg2);memcpy(lpOut8, (char*)nMsg, 4);memcpy(lpOut12, strName1, 100);memcpy(lpOut112, strName2, 100);}Msg2* DeSerialize(char* lpIn){Msg2* lpM new Msg2();int32_t nTmpLen *(int32_t*)lpIn;lpM-nLen be32toh(nTmpLen);int32_t nTmpType *(int32_t*)(lpIn4);lpM-nType be32toh(nTmpType);int32_t nMsg *(int32_t*)(lpIn8);lpM-nMsg2 be32toh(nMsg);memcpy(lpM-strName1, lpIn12, 100);memcpy(lpM-strName2, lpIn112, 100);return lpM;} }; class ClientCallback:public mynet::IClientCallback{ public:virtual ~ClientCallback(){printf(~ClientCallback\n);}virtual void OnEvent(short events){printf(recv event %d\n, events);}virtual void OnMessage(char* lpMsg, int32_t nLen){printf(msg len:%d\n, nLen);} }; int main(){mynet::SetLogCb(logcb);mynet::FactoryConfig stConfig;stConfig.nWorkThreadNum 1;mynet::IFactory* lpFac mynet::CreateFactory(stConfig);lpFac-Start();mynet::ClientConfig stCliConfig;stCliConfig.nConnTimeout 4;stCliConfig.nPort 13142;strcpy(stCliConfig.strIp, 127.0.0.1);stCliConfig.nThreadIndex 0;ClientCallback stCall;mynet::IClient* lpCli lpFac-CreateClient(stCliConfig, stCall);int32_t nRet lpCli-DoConnect(13142, stCliConfig.strIp, 4, true, true);printf(conn ret %d\n, nRet);if(nRet ! RET_CODE_CONN_SUCC){return 0;}char* lpBuf (char*)malloc(Msg1::CalculateSize());for(int32_t i 0; i 10; i){Msg1 stM1;stM1.nMsg1 11;strcpy(stM1.strName, StrName1); stM1.Serialize(lpBuf);int32_t nSend lpCli-SendData(lpBuf, Msg1::CalculateSize());printf(%d send ret %d\n, i, nSend);}std::this_thread::sleep_for(std::chrono::seconds(6)); lpCli-DoDisconnect(true, true);lpFac-Stop();mynet::DestroyFactory(lpFac);return 0; }2.服务端demo #include ifactory.h #include ilog.h #include iserver.h #include define.h #include stdio.h #include stdlib.h #include string.h #include thread #include chrono #include mutex #include iostream #include fstream std::mutex mtx; std::ofstream logFile(svr_logfile.txt, std::ios_base::out); void logcb(mynet::LOGLEVEL nLevel, const char *msg){//if(nLevel mynet::LOGLEVEL::EVENT_LOG_ERR){pthread_t thread_id pthread_self(); std::lock_guardstd::mutex lock(mtx); logFile tid: (uint32_t)thread_id level: (int32_t)nLevel : msg: msg std::endl; //} }struct Msg1{int32_t nLen;int32_t nType;int32_t nMsg1;char strName[100];Msg1(){nLen CalculateSize();nType 1;}static int32_t CalculateSize(){return 112;}void Serialize(char* lpOut){int32_t nTmpLen htobe32(nLen);memcpy(lpOut, (char*)nTmpLen, 4);int32_t nTmpType htobe32(nType);memcpy(lpOut4, (char*)nTmpType, 4);int32_t nMsg htobe32(nMsg1);memcpy(lpOut8, (char*)nMsg, 4);memcpy(lpOut12, strName, 100);}Msg1* DeSerialize(char* lpIn){Msg1* lpM new Msg1();int32_t nTmpLen *(int32_t*)lpIn;lpM-nLen be32toh(nTmpLen);int32_t nTmpType *(int32_t*)((char*)lpIn4);lpM-nType be32toh(nTmpType);int32_t nMsg *(int32_t*)(lpIn8);lpM-nMsg1 be32toh(nMsg);memcpy(lpM-strName, lpIn12, 100);return lpM;} }; struct Msg2{int32_t nLen;int32_t nType;int32_t nMsg2;char strName1[100];char strName2[100];static int32_t CalculateSize(){return 212;}void Serialize(char* lpOut){int32_t nTmpLen htobe32(nLen);memcpy(lpOut, (char*)nTmpLen, 4);int32_t nTmpType htobe32(nType);memcpy(lpOut4, (char*)nTmpType, 4);int32_t nMsg htobe32(nMsg2);memcpy(lpOut8, (char*)nMsg, 4);memcpy(lpOut12, strName1, 100);memcpy(lpOut112, strName2, 100);}Msg2* DeSerialize(char* lpIn){Msg2* lpM new Msg2();int32_t nTmpLen *(int32_t*)lpIn;lpM-nLen be32toh(nTmpLen);int32_t nTmpType *(int32_t*)(lpIn4);lpM-nType be32toh(nTmpType);int32_t nMsg *(int32_t*)(lpIn8);lpM-nMsg2 be32toh(nMsg);memcpy(lpM-strName1, lpIn12, 100);memcpy(lpM-strName2, lpIn112, 100);return lpM;} };class ServerCallback:public mynet::IServerCallback{ public:ServerCallback(){}virtual ~ServerCallback(){printf(~ServerCallback\n);}virtual void OnEvent(int32_t nIndex, short events){printf(index_%d,events_%d\n, nIndex, events);}virtual void OnMessage(int32_t nIndex, char* lpMsg, int32_t nLen){printf(index_%d,len_%d\n, nIndex, nLen);m_lpSvr-SendData(nIndex, lpMsg, nLen);} public:mynet::IServer* m_lpSvr nullptr; };int main(){mynet::SetLogCb(logcb);mynet::FactoryConfig stConfig;stConfig.nWorkThreadNum 1;mynet::IFactory* lpFac mynet::CreateFactory(stConfig);lpFac-Start();mynet::ServerConfig stSvrConfig;stSvrConfig.nPort 13142;stSvrConfig.nListenThreadIndex 0;ServerCallback stSvrCallback;mynet::IServer* lpSvr lpFac-CreateServer(stSvrConfig, stSvrCallback);stSvrCallback.m_lpSvr lpSvr;lpSvr-Start();while(true){std::this_thread::sleep_for(std::chrono::seconds(6)); }lpSvr-Stop();lpFac-Stop();mynet::DestroyFactory(lpFac);return 0; }后续待处理事项 1.完善各类场景单元测试 2.支持epoll的et模式事件分发 3.制作规范清晰的使用文档 开源地址 1.https://github.com/xubenhao/mynet 2. https://gitee.com/xubenhao2/mynet
http://www.dnsts.com.cn/news/49669.html

相关文章:

  • 谁给个好网站wordpress预览pdf
  • ajax做网站建设部网站办事大厅栏目
  • 旅游做网站企业移动网站建设商
  • 制作网站生成器.net网站开发的例子
  • 网页设计公司网站制作校园招生网站建设的简报
  • 网站删除关键词网站建设的主要内容包括
  • 网站推广公司ihanshi1元购网站建设
  • 做exo小说的网站网站文件夹没有权限设置
  • 怎样做一元购网站小程序免费制作平台
  • 聚美优品网站建设项目规划书做流媒体视频播放网站求助
  • 免费自建 响应式 网站龙泉市建设局门户网站
  • 网站首页效果图怎么做关键词优化需要从哪些方面开展
  • 做淘宝头像的网站有哪些自己怎么建个网站赚钱
  • 哪些网站可以上传自己做的视频穿越之游戏开发系统
  • 制作公司网站要多少费用呢如何判断一个网站的价值
  • 网站怎么排名马鞍山的网站建设公司
  • 广州网站建设比较好的公司自动推广软件
  • 哈尔滨网站建设兼职优化大师电脑版官网
  • 翻书效果的网站商城网站制作公司
  • seo怎么去优化淮安做网站优化
  • 全能优化型网站互联网app推广工作怎么样
  • 高端网站设计新鸿儒昆明市网站建设公司
  • 网站模版怎么上传到空间网站建设的ppt
  • 建站之星有手机版模板网站开发前如何配置电脑
  • 网站建设教学廊坊网站设计需要考虑的基本原则
  • 关于网站建设项目收取费用卯兔科技网站建设
  • 高端网站建设公司兴田德润可以不wordpress主题小工具修改
  • 海南电子商务网站手机软件商城免费下载
  • 网站建设品牌公司排名wordpress app下载模板下载
  • 网站怎么做才有百度权重html网站素材