使用ruby发送套接字消息而不关闭连接

Jam*_*rce 4 ruby sockets

我正在研究一个小的ruby客户端,它将连续的信息流发送到套接字服务器(然后传递给其他侦听的客户端).我不希望每次发送数据时都关闭连接,但是看起来使用ruby,在关闭连接之前不会发送数据.是否有另一种方法可以在不重新连接到服务器的情况下执行此操作?传输数据必须在客户端脚本发送后立即传递.

目前我必须在循环中执行此操作:

s = TCPsocket.new('127.0.0.1',2000)
s.send('Hello World',0)
s.close
Run Code Online (Sandbox Code Playgroud)

但是,这意味着我经常需要非常快速地重新连接到套接字服务器.我希望能够连接到循环外部的套接字服务器,并在循环完成时关闭.如果我现在这样做,发送数据将在启动'关闭'时立即发送.

是否可以在继续发送信息的同时保持连接打开?我知道这在其他语言和脚本中是可行的,因为我在AS3中已经多次这样做了.

提前致谢.

Jam*_*rce 10

要回答我自己的问题(希望能得到其他人的帮助),请\000在ruby中的消息后添加socket.send('some message\000', 0).为了澄清,您可以输入此内容

socket = TCPsocket.new('127.0.0.1',2000)
socket.send('some message\000', 0)
Run Code Online (Sandbox Code Playgroud)

上面将首先发送一条消息,然后先关闭套接字连接(socket.close).另外供参考的是ruby套接字服务器,我用它来广播到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
Run Code Online (Sandbox Code Playgroud)

我应该给予应有的信用,并且套接字服务器代码基于这篇博文:http://www.giantflyingsaucer.com/blog/? p = 1147