【发布时间】:2014-05-30 13:34:08
【问题描述】:
我需要为TCPSoket 客户端实现一个监听循环,它不会阻止向同一个套接字发送数据。
大概的结构是这样的:
class SocketWrapper
def initialize
@messages = []
@socket = TCPSocket.open('192.168.0.25', 2000)
Thread.new do
loop do
@messages.push @socket.read
end
end
end
def send_message(msg)
@socket.write msg
end
def read_messages
@messages.dup
@messages.clear
def
end
这个结构一切正常吗?
我需要在这里实现两个策略:
- response = send_request(request_data)
- 监听器 - 当传入的数据不是对我的请求的响应,而是我必须监听的异步数据时。
【问题讨论】:
-
请记住,
@socket.read是一个阻塞调用,在大多数情况下会等到您从另一端关闭套接字。如果这不是您想要的通过套接字发送长度并使用read(n)。并按照答案中的建议使用Queue。 -
是不是说socket在一个线程等待传入数据时,就不能在其他线程发送数据了?是否有一些客户端套接字事件要订阅?
标签: ruby multithreading asynchronous tcpsocket