分类 网络编程 下的文章

前言

UDP为无连接不可靠的数据报协议,不同于TCP提供的面向连接的可靠字节流。

客户端不需要与服务器事先建立连接,而是只管使用sendto函数给服务器发送数据报,其中必须指定服务器的地址作为参数。

服务器不接受来自客户的连接,而是只管调用recvfrom函数,等待来自某个客户的数据到达。recvfrom将与所接收的数据报一道返回客户的协议地址,因此服务器可以把相应发送给正确的客户。

- 阅读剩余部分 -

前言

前两篇分别介绍了IO多路复用的select()poll()

  • select()解决了传统的网络编程中,一个线程只能服务一个客户端连接的问题,但是最多只能同时监听1024个文件描述符,并且效率比较低。
  • poll()解决了select()监听文件描述符个数限制的问题,但是并没有解决效率的问题。

本篇介绍epoll(),既解决了描述符个数限制的问题,又解决了效率问题。

- 阅读剩余部分 -

前言

前一篇介绍了IO多路复用中的select(),但是select()的缺点很明显,监控描述符的个数不能超过1024个,所以后来为了解决这个问题,引入了poll(),理论上poll()监听的描述符个数不受限制,但是实际能监控的描述符个数和机器自身的硬件配置有关系。

- 阅读剩余部分 -

前言

Linux系统下,select()为最早支持IO多路复用的系统调用。该接口相比poll()epoll()来说,更为简单,但是效率较低,而且最大只支持FD_SETSIZE(1024)个描述符。如果对并发数量的要求高于1024,请考虑使用poll()或者epoll()

- 阅读剩余部分 -

Libevent 的 evbuffer 功能实现了一个字节队列,针对将数据添加到末尾和从前面删除数据进行了优化。

Evbuffers 通常用于执行缓冲网络 IO 的“缓冲”部分。它们不提供调度 IO 或在 IO 准备好时触发 IO 的功能:这是 bufferevents 所做的功能。

- 阅读剩余部分 -