使用ruby发送套接字消息而不关闭连接
我正在开发一个小型ruby客户机,它向socket服务器发送连续的信息流(然后传递给其他正在侦听的客户机)。我不希望每次发送数据时都必须关闭连接,但是在ruby中,在我关闭连接之前,数据似乎不会被发送。是否有其他方法可以在不重新连接到服务器的情况下执行此操作?客户机脚本发送传出数据后,必须立即传递传出数据 目前,我必须在一个循环中执行此操作:使用ruby发送套接字消息而不关闭连接,ruby,sockets,Ruby,Sockets,我正在开发一个小型ruby客户机,它向socket服务器发送连续的信息流(然后传递给其他正在侦听的客户机)。我不希望每次发送数据时都必须关闭连接,但是在ruby中,在我关闭连接之前,数据似乎不会被发送。是否有其他方法可以在不重新连接到服务器的情况下执行此操作?客户机脚本发送传出数据后,必须立即传递传出数据 目前,我必须在一个循环中执行此操作: s = TCPsocket.new('127.0.0.1',2000) s.send('Hello World',0) s.close 然而,这意味着我
s = TCPsocket.new('127.0.0.1',2000)
s.send('Hello World',0)
s.close
然而,这意味着我必须不断地重新连接到套接字服务器,通常是很快地连续连接。我希望能够连接到循环外部的套接字服务器,并在循环完成时关闭。如果我现在这样做,发送数据将在“关闭”启动时立即全部发送
是否可以在继续发送信息的同时保持连接打开?我知道这在其他语言和脚本中是可能的,因为我在AS3中已经多次这样做了
提前谢谢。刷新是否有效
s = TCPSocket.new('127.0.0.1', 2000)
1.upto(10) do |n|
s.send("Hello #{n}\n", 0)
s.flush
end
s.close
为了回答我自己的问题(希望能得到其他人的帮助),在rubysocket.send('some message\000',0)
中的消息后添加\000
,可以正常工作。为了澄清,您可以键入以下内容
socket = TCPsocket.new('127.0.0.1',2000)
socket.send('some message\000', 0)
上面将发送一条消息,但不首先关闭套接字连接(socket.close
)。还可以参考ruby socket服务器,我正在使用它向Flash广播
require 'socket'
portnumber = 2000
socketServer = TCPServer.open(portnumber)
while true
Thread.new(socketServer.accept) do |connection|
puts "Accepting connection from: #{connection.peeraddr[2]}"
begin
while connection
incomingData = connection.gets("\0")
if incomingData != nil
incomingData = incomingData.chomp
end
puts "Incoming: #{incomingData}"
if incomingData == "DISCONNECT\0"
puts "Received: DISCONNECT, closed connection"
connection.close
break
else
connection.puts "#{incomingData}"
connection.flush
end
end
rescue Exception => e
# Displays Error Message
puts "#{ e } (#{ e.class })"
ensure
connection.close
puts "ensure: Closing"
end
end
end
我应该在适当的时候给予表扬,套接字服务器代码基于以下博文:使用close\u write()
禁止使用关机系统调用进行进一步写入。更
不幸的是,这没有起作用。我将尝试在服务器代码中查看是否有我可以做的事情,但是服务器代码处理来自Flash AS3的连接和数据传输时没有任何问题(这让我相信故障不在套接字服务器中)。
Socket.tcp("www.ruby-lang.org", 80) {|sock|
sock.print "GET / HTTP/1.0\r\nHost: www.ruby-lang.org\r\n\r\n"
sock.close_write
puts sock.read
}