就像在客户端套接字中一样
socket = Socket.new(AF_INET, SOCK_STREAM, 0)
sockaddr = Socket.pack_sockaddr_in(2200, 'localhost')
socket.connect_nonblock(sockaddr)
server_msg = socket.recv_nonblock(3058)
vs
clientSession = TCPSocket.new( "localhost",2200)
server_msg = socket.recv(3058)
像在服务器中
socket = Socket.new(AF_INET, SOCK_STREAM, 0)
sockaddr = Socket.sockaddr_in(6212, 'localhost')
socket.bind(sockaddr)
socket.listen(5)
vs
server = TCPServer.new("localhost",3000)
是语法上不同还是逻辑上我们应该让它们成为非阻塞的?
最佳答案
也许你可以使用超时?
我们使用以下代码让 ruby 套接字客户端在没有响应时超时:
@socket = TCPSocket.new(host, port)
timeout=30.0
ready = IO.select([@socket], nil, nil, timeout)
if ready
response = @socket.recv(SOCKET_READ_SIZE)
else
message = "Socket communications timed out after #{timeout} seconds"
logger.error message
@socket.close if @socket.present?
raise message
end
关于ruby - 如何在 ruby 中创建非阻塞 TCP 服务器和 TCP 套接字,只有以下更改才会有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12653532/