在Ruby中遇到GServer的问题

时间:2011-05-27 19:51:22

标签: ruby

好的,所以我有一个非常简单的GServer服务器和一个更简单的TCPSocket客户端(我考虑编写自己的异步TCPServer,但结果证明这是我现在可以填充的更大的鞋子,所以我偶然发现了wonderul GServer)。

现在我在server.rb

中有这段代码
require 'gserver'
class PServer < GServer
  def initialize
    super(9998)
  end

  def serve client_msg
    for byte in client_msg.bytes
      print byte.chr #Just playing, heh
    end
    print "\n"
    client_msg.print 'Lala'
  end
end

s = PServer.new
s.audit = true
s.debug = true
s.start
s.join

所以,当我运行它时,我没有遇到任何问题(我认为)并获得此输出:

  
    

[日期和内容,输入时间太长] PServer 127.0.0.1:9998开始

  

client.rb代码:

require 'socket'
client = TCPSocket.new('localhost', 9998)
client.print "Hi!"
p client.gets
client.close

现在,当我运行客户端时,服务器报告它已连接,“嗨!”信息。客户'浮动'打开(抱歉没有更好的表达)整个时间,打开连接(但“Lala”没有打印出来)。

当我再次运行客户端时,省略行p client.gets;服务器报告连接,“嗨!”并断开客户端。客户端刚刚执行,我回到了旧的提示符。现在,我想知道为什么会这样。是GServer,客户,我做了一件可怕的错误吗?请告诉我。我现在正处于一种隐喻的痛苦中。

感谢您阅读这篇巨大的文字(可能充满了拼写错误)。 XO

1 个答案:

答案 0 :(得分:0)

我认为您对serve的参数有错误的想法。它不是消息,而是IO对象。在IO对象上调用bytes将尝试读取它,直到没有任何内容可读(即,直到连接关闭)。您应该使用gets进行基于行的通信,或使用read进行二进制协议。

尝试使用以下方法替换serve方法:

def serve(socket)
  puts socket.gets.chomp
  socket.puts 'Lala'
end