【发布时间】:2012-11-04 22:45:54
【问题描述】:
是的,不是吗?
我怎样才能实现这样的目标:
在客户端
loop do
socket.read(MAX_LEN)
socket.pause_read # the client is busy, do not send any more data, similar to: C system call shutdown(sock, SHUT_RD)
# ... working
socket.resume_read # the client is ready to work again.
end
在服务器端
loop do
rd, wr, _ = select(rdsockets, wrsockets)
# wr is an array fill of clients ready to work
wr.each {}
end
PS:可以使用 C 或 Ruby 提供帮助。 提前谢谢你。
编辑: 传入的数据具有预定义的格式,并且传入数据的长度会有所不同。
编辑2: 操作系统:Linux
【问题讨论】:
-
请解释您认为
pause_rd和resume_rd应该做什么。对我来说,它们看起来像是无操作。 -
@Celada 对不起,
pause_rd与 C 语言中的shutdown(sock, SHUT_RD);相似,而resume_rd则完全相反。 -
如果您停止阅读,数据流将停止,并在您停止阅读时恢复。当所有中间缓冲区填满时,发送方将阻塞。但你不应该做这种事情。我无法理解“通过不让服务器在未定义的时间间隔内写入套接字来保护数据的完整性”。这听起来对我来说不是问题,或者是解决实际问题的完全错误的方法。