几个问题:
1.libevent到底用的是select还是iocp,然后是如何突破64限制的
typedef struct fd_set {u_int   fd_count;               /* how many are SET? */SOCKET  fd_array[FD_SETSIZE];   /* an array of SOCKETs */
} fd
首先libevent使用的是select,至于为什么不用iocp,有可能没有实现
#define FD_SETSIZE      64
看到这个就以为最多是64个连接,
那时因为这个是在暂时分配栈的内存,如果分配在堆上就可以解决
看Libevent里面
struct win_fd_set {
u_int fd_count;
SOCKET fd_array[1];
};
然后在堆上分配内存,就可以动态指定大小,只要内存可以存放
具体看http://www.cnblogs.com/ayanmw/p/3467373.html
2.客户端为什么要监听
看到客户端监听的端口比较随便,所以个人判断这个监听是没用的,也许只是为了和服务端的代码重用,主要是为了使用下面的派发线程
m_spThread.reset(new std::thread([this]
{//SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);//event_base_loop(m_base, EVLOOP_ONCE);
    event_base_dispatch(m_base);if(WSAENOTSOCK == WSAGetLastError()){Plug::PlugMessageBox(L"操作无效套接字啊!");}Plug::PlugMessageBox(L"Libevent派发线程退出!");
}));3.什么时候调用读事件和写事件,往哪儿写,从哪儿读
当input有数据的时候调用读事件,当Output为空的时候调用写事件
读是从Input读,写是往output写
bufferevent_setcb(bev, conn_readcb, NULL, conn_eventcb, c2);//NULL表示bufferevent不会进行数据的读取或者写入
bufferevent_enable(bev, EV_READ | EV_WRITE );
服务器不用设置写事件,而是自己调用bufferevent_write向output写入数据的
客户端设置了写事件,然后也是自己调用的bufferevent_write,但这个写事件回调里面没做什么东西,只有当output没有数据的时候才会调用这个写事件
3.channelid到底对应的是啥,到底是如何实现这么多客户端并发的:
现在知道channelid对应一个bufferevent,而bufferevent对应一个socket,这样就确定是哪个客户端了,然后select模式知道哪些socket可读,可写,然后就自动的往socket写,或者从socket读4.两句代码的理解//设置读写回调,当input有数据的时候需要调用conn_readcb,这个是libevent自动调用的
    bufferevent_setcb(bev, conn_readcb, conn_writecb, conn_eventcb, c2);//我去这个有点坑啊,这个EV_WIRTE是默认设置的,bufferevent_get_enabled默认得到的是6//EV_WRITE和EV_READ是指socket和缓冲区之间的读和写
    bufferevent_enable(bev, EV_READ);5.写事件
至于服务器为什么不设置写回调函数,真心不知道,这个还真不太清楚为啥,但客户端设置了

转载于:https://www.cnblogs.com/zzyoucan/p/3957912.html

项目中libevent几个问题相关推荐

  1. 第五届北大青鸟杯全国IT精英挑战赛华中区一等奖项目——中商百货分销系统_关键代码说明书

    第五届北大青鸟杯全国IT精英挑战赛华中区一等奖项目--中商百货分销系统 关键代码说明书 作者:武汉宏鹏田超凡 版权所有,转载请注明原作者,仿冒侵权必究法律责任 中商百货分销商城关键代码说明...... ...

  2. canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传

    使用方法 项目中引入 npm install html2canvas html代码 //html代码 js代码 // 引入html2canvas import html2canvas from 'ht ...

  3. android studio 自动提示jni代码,如何将JNI(C/C++本机代码)添加到现有的Android Studio项目中...

    从现有项目中执行以下步骤: 1.修改build.gradle(模块应用程序)看起来像这样(很多变化!): apply plugin: 'com.android.model.application' m ...

  4. android使用webview上传文件,Android项目中如何在webview页面中上传文件

    Android项目中如何在webview页面中上传文件 发布时间:2020-11-26 15:56:27 来源:亿速云 阅读:68 作者:Leah 本篇文章为大家展示了Android项目中如何在web ...

  5. java fragment_Java Web Fragment在项目中使用方法详解

    Web Fragment 是什么 - 它是在 servlet 3.0开始支持的,可以把一个dy web项目拆分为多个项目,解耦合,使其在项目中开发效率提高,下面我演示简单的项目创建过程 用eclips ...

  6. JAVA Web项目中所出现错误及解决方式合集(不断更新中)

    JAVA Web项目中所出现错误及解决方式合集 前言 一.几个或许会用到的软件下载官网 二.Eclipse的[preferences]下没有[sever]选项 三.Tomcat的安装路径找不到 四.T ...

  7. Android Studio 在项目中引用第三方jar包

    在Android Studio项目中引用第三方jar包的方法: 步骤: 1.在build.gradle文件中添加如下代码: 备注:要添加在Android作用域下 sourceSets {main {j ...

  8. Database项目中关于Procedure sp_refreshsqlmodule_internal的错误

    最近项目中发现一怪问题,使用DB项目发布数据库时,总提示 "(110,1): SQL72014: .Net SqlClient Data Provider: Msg 1222, Level ...

  9. 分享.NET开发中经常使用到的代码片段 完全从实际项目中提取出来,也可被反反复复的重复借用...

    几年前,一篇<ASP.NET开发人员经常使用的三十三种代码>非常流行,它总结了一些经常在ASP.NET开发中使用到的代码,直接可以拿来使用.今天重读这篇文章,有感而发,善于总结也是进步,于 ...

  10. C++项目中的extern C {}

    2010-07-10 19:45 by 吴秦, 92864 阅读, 22 评论, 收藏, 编辑 引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: ? 1 2 3 4 5 6 7 8 9 ...

最新文章

  1. Windows Azure Service Bus (5) 主题(Topic) 使用VS2013开发Service Bus Topic
  2. csgo一键跳投_个人csgo单练cfg参数和投掷物,附带一期叉车教学,萌新佛系休闲党必备...
  3. ssm(Spring+Spring mvc+mybatis)实体类——Dept
  4. Android Activity无法启动。
  5. JavaScript数据类型之字符串型(4)
  6. [转载] python文件操作--写入文件
  7. oracle+11g+32位数据库能导入到64位么,Oracle 11G数据库导出问题解决
  8. NAR:eggNOG 5—蛋白功能层级注释数据库
  9. Typora安装主题方法
  10. 什么样的Java程序员可以去BAT公司上班?
  11. CTF比赛(详细介绍)
  12. 爬虫有道词典进行自动翻译
  13. WPF学习笔记16 BookDemo 2
  14. java-练习题-小学算术题
  15. C#毕业设计——基于C#+asp.net+sqlserver的校园新闻发布系统设计与实现(毕业论文+程序源码)——新闻发布系统
  16. Visual Stuido 2005 VSTS Developer Edition 的小虫
  17. 什么是“中间人攻击“?怎样防止这种攻击?
  18. 【快速入门】创建你的第一个linux程序(详细教程)
  19. K8s常见问题分析解决(coreDns)
  20. [转载]ARP表和FDB表的区别

热门文章

  1. dubbo 数据传输大小配置
  2. 如何在mysql下实现事务的提交与回滚
  3. MYSQL数据库事务介绍
  4. SCADA之父:物理隔离没什么用
  5. C/C++ inline 函数
  6. Python [6] IT资产管理(下)
  7. 网络基础---网络层
  8. 第二次发布 - 轻剑傲风的RSS简易阅读器改装版。
  9. RFC 5961翻译
  10. 概率论:集合、假设检验、分布、矩阵、估计