【发布时间】:2015-12-08 06:14:08
【问题描述】:
我有一个简单的问题,我自己在 Google 上搜索无法解决,希望您能帮助我。
我正在编写一个网络应用程序服务器并使用 epoll/kqueue 来处理连接。
我应该在收到请求并处理它后立即向客户端套接字发送响应,还是应该将客户端套接字添加到 epoll/kqueue 监控中并在它告诉我它可用于写入操作时发送响应?
例如。 (伪代码)。我应该这样做:
while(true) {
epoll/kqueue check for events
if(triggered event is server listening socket) {
accept() new socket
add it to epoll/kqueue monitoring
} else //triggered event is client socket
if(event is read) {
recv() request and process it
send() response //!!!!!!!!!!!!!!!!!!
} else
...
}
或者这个:
while(true) {
epoll/kqueue check for events
if(triggered event is server listening socket) {
accept() new socket
add it to epoll/kqueue monitoring
} else //triggered event is client socket
if(event is read) {
recv() request and process it
add client socket to epoll/kqueue monitoring
} else if(event is write)
send() previously processed response //!!!!!!!!!!!!!!!
else
...
}
在我之前做的简单套接字实验中,响应在处理请求后立即发送,就像第一个伪代码显示一样,但由于延迟、浏览器连接数限制,我不知道它在实际环境中是否同样有效等。
所以我觉得像第二个伪代码那样做是有意义的,但我不知道是否必须等待 epoll/kqueue 告诉客户端套接字已准备好进行写入操作会在 TCP 通信中增加一些显着的延迟。
【问题讨论】:
标签: sockets network-programming