2011-03-21 76 views
2

我有一个应用程序,我正在编写的通过tcpsocket将记录信息发送到服务器并让监视器客户端连接到服务器以查看记录数据。到目前为止,我能够到达将信息发送到服务器的阶段,但是我需要关于如何去下一个阶段的一些想法。使用Ruby tcpsever可以使用哪些方法让服务器将传入数据重新发送到客户端?我怎样才能让数据存储在线程中?Ruby tcpserver客户端服务器

require "socket" 

server_socket = TCPServer.new('localhost', 2200) 

loop do 
    # Create a new thread for each connection. 
    Thread.start(server_socket.accept) do |session| 

    # check if received is viewer request 
    line = session.gets 
    if line =~ /viewer/ 
     @filter = line[/\:(.*?)\:/] 
     session.puts "Listining for #{filter}" 

     loop do 
     if (log = ### need input here from logging app ###) 
      # Show if filter is set for all or cli matches to filter 
      if @filter == ':all:' || log =~ /\:(.*?)\:/ 
      session.puts log 
      end 

      # Read trace_viewer input. 
      if session.gets =~ /quit/ 
      # close the connections 
      session.puts "Closing connection. Bye!" 
      session.close 
      break 
      end 
     end 
     end 
    end 
    end 
end 
+0

关于让服务器将数据“重新发送”到客户端:数据是回显到发送客户端还是被转发到另一个客户端?这听起来像你还没有真正决定它应该如何工作。 – 2011-03-21 02:01:54

+0

服务器应该将数据转发给客户端 – veccy 2011-03-21 02:19:45

+0

服务器如何找到客户端? – 2011-03-21 02:30:37

回答

0

与连接到它听起来像一个典型的客户机/服务器配置的服务器,与一些客户端发送的数据,以及其他请求它的客户。是否有任何理由不使用标准的HTTP客户机/服务器,即Web服务器,而不是重新发明轮子?使用Sinatra或Padrino,甚至Rails,你会基本完成。

我该如何让数据跨线程存储?

Ruby的线程模块包括Queue,这对于在线程之间移动数据很有帮助。文档页面有一个应该帮助的例子。

使用队列的相同想法适用于使用表。我建议使用数据库作为您的使用队列,而不是在内存中使用。停电或应用程序崩溃将丢失所有数据,如果它是内存中的队列并且客户端未检索到所有内容。写入和读取数据库意味着数据将存在这样的问题。

保持模式简单,提供一个合理的索引,它应该足够快,适用于大多数用途。您需要一些清洁代码来保持数据库清洁,但使用SQL或像Sequel或ActiveRecord这样的ORM很容易。