socket
-> 绑定端口,IP -> 监听socket
-> 接受新连接 -> 处理读写... -> 关闭完成的连接socket
,进行一些优化处理,设置一些属性之类的,但那都是固定模式,想想就能明白。硬要说重要的地方,也就是在于是否把socket
设为非阻塞(non-blocking)了。所谓非阻塞,我还是不班门弄斧了,请移步 UNIX网络编程-卷1-中文·第三版 127页(英文版160页) 的图
6-6
,清楚的对比了,阻塞,非阻塞,异步,I/O复用的区别和含义。十分建议写网络程序之前,去把这本书的某些章节大致过一遍。
我给一个不太严密的解释,那就是 将你这个程序需要等待的地方,集中起来
打个比方:
accept()
)了read, write
),只不过套接字设为非阻塞的了。epoll
, Unix(包括Mac)平台下的kqueue
, Windows平台下的IOCP
,各平台通用的select
, poll
,还有几个历史实现就不赘述了。select
, poll
在活跃连接明显少于总连接数的情况下,性能比前三个要差许多,故本章使用的是epoll
,(当然还有资料比较多的原因啦说说 epoll
的工作
epoll_wait()
调用上事件驱动
epoll_clt()
来设置要监听的事件,当然也可以同时监听多个事件,看你的设计了。具体的epoll
接口的详细介绍,可以直接在Linux上,使用man epoll
进行查看手册,这是基本功。
epoll_create
, epoll_ctl
, epoll_wait
epoll
。那具体说一下,整个程序的流程epoll
用来服务于接收新连接这个环节(accept
)epoll
用来处理这些新连接的事务。epoll
)epoll
来处理,监听套接字的读事件,也就是接受新连接epoll
,用来平分处理这些新连接。小经验,在编程中,读往往比写要复杂许多。在网络编程里面亦是。
Visual Box
,Windows下也可以使用商业版的VMware
,Mac下有一个更棒的商业版选择Paralelle Desktop
,但是这都是软件,算是无关紧要的。Linux
发行版,由于我用的是 Debian
系列的Ubuntu 16.04 LTS
,所以我也推荐这个发行版,其他的发行版也许略有差异,不再多说。Clion
或者Kdevelop
。Vim
我也不会阻拦,但是请装好两个插件Nerdtree
和YouCompleteMe
,配合好另一个软件tmux
(简单使用),不然你会想死。Vim
,你也可以选择 Visual Studio Code
加装一个C/C++ tools
也是不错的。Clion
了,简单明了,且还是使用CMake
作为构建工具。Google
和Unix网络编程卷1
,如果你两个都没有的话,不说了,再见。建议准备一个那玩意儿去访问Google
。