几个问题:
.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[];
};
然后在堆上分配内存,就可以动态指定大小,只要内存可以存放
具体看http://www.cnblogs.com/ayanmw/p/3467373.html
.客户端为什么要监听
看到客户端监听的端口比较随便,所以个人判断这个监听是没用的,也许只是为了和服务端的代码重用,主要是为了使用下面的派发线程
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派发线程退出!");
})); .什么时候调用读事件和写事件,往哪儿写,从哪儿读
当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没有数据的时候才会调用这个写事件
.channelid到底对应的是啥,到底是如何实现这么多客户端并发的:
现在知道channelid对应一个bufferevent,而bufferevent对应一个socket,这样就确定是哪个客户端了,然后select模式知道哪些socket可读,可写,然后就自动的往socket写,或者从socket读 .两句代码的理解
//设置读写回调,当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); .写事件
至于服务器为什么不设置写回调函数,真心不知道,这个还真不太清楚为啥,但客户端设置了

项目中libevent几个问题的更多相关文章

  1. 在CLion项目中指定不同版本的链接库

    在项目中, 需要使用到libevent-2.1.x, 但是Ubuntu16.04自带的libevent版本为2.0.5, 需要另外编译安装新版的libevent, 安装过程很简单 -stable.ta ...

  2. VS项目中使用Nuget还原包后编译生产还一直报错?

    Nuget官网下载Nuget项目包的命令地址:https://www.nuget.org/packages 今天就遇到一个比较奇葩的问题,折腾了很久终于搞定了: 问题是这样的:我的解决方案原本是好好的 ...

  3. ABP项目中使用Swagger生成动态WebAPI

    本文是根据角落的白板报的<使用ABP实现SwaggerUI,生成动态webapi>一文的学习总结,感谢原文作者角落的白板报. 1 安装Swashbuckle.core 1.1 选择WebA ...

  4. iOS 之项目中遇到的问题总结

    昨天去一家公司面试,面试官问了我在项目开发中遇到过哪些问题,是什么引起的,怎样解决的? 当时由于有点小紧张只说出了一两点,现在就来好好总结一下. 问题: 1.两表联动 所谓的两表联动就是有左右两个表格 ...

  5. My97DatePicker时间控件在项目中的应用

    一.下载My97DatePicker的压缩包My97DatePicker.rar,解压. 注:My97DatePicker最新版本有开发包,项目中使用时删掉,以便节省空间,提高程序的运行效率. 二.在 ...

  6. 在项目中同时使用Objective-C和Swift

    苹果发布的Swift语言可以和之前的Objective-C语言同时存在于一个项目中. 可能有人会认为是同一个类文件中既可以有Objective-C也可以有Swift,这是不对的.同一个类文件或同一个代 ...

  7. 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持

    在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreS ...

  8. 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

    在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...

  9. Web API项目中使用Area对业务进行分类管理

    在之前开发的很多Web API项目中,为了方便以及快速开发,往往把整个Web API的控制器放在基目录的Controllers目录中,但随着业务越来越复杂,这样Controllers目录中的文件就增加 ...

随机推荐

  1. git 基本使用

    简单几步操作让你在终端下用git实现文件的上传. 一.克隆项目    在工作中,常见的情景都是远程库已经建好了,需要大家把代码拉下来,共同协作开发.本文所有操作均在终端下进行.    //克隆一个本地 ...

  2. UI1_UITouch

    // // ViewController.m // UI1_UITouch // // Created by zhangxueming on 15/7/9. // Copyright (c) 2015 ...

  3. 9款精美别致的CSS3菜单和按钮

    1.超具立体感的CSS3 3D菜单 菜单项带小图标 记得之前向大家分享过不少CSS3 3D菜单,比如CSS3 3D动画菜单 3D立方体菜单项和HTML5/CSS3自定义下拉框 3D卡片折叠动画,效果都 ...

  4. CentOS6.5升级手动安装gcc4.8.2

    一.简易安装 操作环境 CentOS6.5 64bit,原版本4.4.7,不能支持C++11的特性~,希望升级到4.8.2 不能通过yum的方法升级,需要自己手动下载安装包并编译 1.1 获取安装包并 ...

  5. jQuery 判断所有图片加载完成

    对于图片的处理,例如幻灯片播放.缩放等,都是依赖于在所有图片完成之后再进行操作. 今天来看下如何判断所有的图片加载完成,而在加载完成之前可以使用 loading 的 gif 图表示正在加载中. 一.普 ...

  6. 【Qt】Qt之进程间通信(IPC)【转】

    简述 进程间通信,就是在不同进程之间传播或交换信息.那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区.但是,系统空间却是“ ...

  7. Gulp vs Grunt 前端构建工具对比

    Gulp vs Grunt 前端工程的构建工具对比 1. Grunt -> Gulp 早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Jav ...

  8. string和json转换的简单应用

    import com.alibaba.fastjson.JSON; String strjson = request.getParameter("param"); //url-js ...

  9. 利用Unicode属性移除文本中的标点符号

    原文:http://bbs.csdn.net/topics/270033191   摘抄: str = str.replaceAll("[\\pP‘’“”]", "&qu ...

  10. Translation002—Package Index(Android包索引)

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 看本翻译前请您注意: 本人初学android,可能有的翻译不是非常准确,但本人尽最大努力,不清楚处会做标记,并附 ...