epoll 参数设置
- events设置
ev.events = EPOLLIN | EPOLLET;
- epoll实现TCP通讯时,events通用设置如上,EPOLLIN代表可socket套接字可接收数据,EPOLLET代表边沿触发。
- 在服务器端, 接受客户端连接的socket不能设置为EPOLLOUT,只设置EPOLLOUT会导致接收不到客户端的连接请求.
- 在服务器端, 设置接收客户端连接后的socket为EPOLLOUT,也会导致错误。错误如下:
eval: Resource temporarily unavailable
- 当需要发送数据时,可以设置为EPOLLOUT,当发送完成,需要设置为EPOLLIN模式。
- epoll_create参数设置
epoll_create(EPOLL_SIZE)
- EPOLL_SIZE值的大小只有0和其他值的区别。经测试设置为0时,运行会报参数传入错误。设置为其他任何一个值时,接收客户端连接都正常。
- 看到另一种写法也可以:
epoll_create1(0)
- epoll之客户端连接数量
- 在测试时,并发数量设置为10000,但是连接数量到达1024个数时报如下错误:
eval: Too many open files
- 这种原因的造成是由于linux对打开文件个数的限制。可以通过如下命令查看:
(base) rd@rd:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31010
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
- 打开文件数量限制为1024,我们需要更改这个限制条件才可以增大并发的数量。
测试代码可以:https://gitee.com/tony-tuning/epoll-demo
- 设计代码时,有以上两种选择,epoll demo使用的是右边方式进行客户端管理。我们也可以为每个客户端创建一个线程进行处理,如上面左图所示。