什么是异步套接字?
什么是异步套接字? 它们与普通套接字(阻塞和非阻塞)有何不同?
任何指向这个方向的指针或指向教程的任何链接都会有所帮助。
谢谢。
有三种方法以异步方式与套接字通信:
-
打开常规套接字,但不要从中读取(因为
read()
块),直到你知道要读取的东西。 您可以使用select()
或poll()
来检查是否有要从套接字读取的数据,如果有,请读取它,因为read()
不会阻塞。 -
通过使用
fcntl()
函数设置O_NONBLOCK
标志,将套接字切换到非阻塞I / O. 在这种情况下,read()
不会阻塞。 -
使用
ioctl()
FIOASYNC
选项设置套接字的O_ASYNC
标志(有关详细信息,请参阅man 7 socket
)。 在这种情况下,当有来自套接字的内容时,您将收到SIGIO
信号。
第三种方法是异步套接字。
在UNIX网络编程中比较以下五种不同的I / O模型:套接字网络API会很有用:
闭塞
非阻塞
I / O复用
信号驱动的I / O.
异步I / O.
如果服务器使用同步套接字,当它正在等待来自客户端的数据时,其主线程被阻塞,因此服务器将不会执行任何操作……如果您有多个客户端连接则这是不好的。 在异步套接字中,您可以在等待客户端向您发送数据时执行其他操作,因此现在您可以有多个客户端连接到您
同步使用像receive()这样的函数,它会阻塞直到收到消息
异步具有beginReceive()endReceive()或类似函数。 它使用回调,当收到消息时,调用回调