Ruby tcpserver客户端服务器
我有一个我正在编写的应用程序,它让日志信息通过tcpsocket发送到服务器,并让一个监视器客户端连接到服务器以查看日志数据。到目前为止,我能够进入信息发送到服务器的阶段,但是我需要一些关于如何进行下一阶段的想法。使用Ruby tcpsever我可以使用什么方法让服务器将传入数据重新发送到客户端?如何跨线程存储数据Ruby tcpserver客户端服务器,ruby,client,tcpserver,Ruby,Client,Tcpserver,我有一个我正在编写的应用程序,它让日志信息通过tcpsocket发送到服务器,并让一个监视器客户端连接到服务器以查看日志数据。到目前为止,我能够进入信息发送到服务器的阶段,但是我需要一些关于如何进行下一阶段的想法。使用Ruby tcpsever我可以使用什么方法让服务器将传入数据重新发送到客户端?如何跨线程存储数据 require "socket" server_socket = TCPServer.new('localhost', 2200) loop do # Creat
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
当客户端连接到服务器时,听起来像是典型的客户端/服务器配置,一些客户端发送数据,另一些客户端请求数据。有什么理由不使用标准的HTTP客户机/服务器,即web服务器,而不是重新发明轮子?使用Sinatra或Padrino,甚至Rails,您将完成大部分工作 如何跨线程存储数据
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
Ruby的线程模块包括,用于在线程之间移动数据。文档页面有一个示例,应该会有所帮助
使用队列的相同想法也适用于使用表。我建议使用数据库作为队列供您使用,而不是在内存中使用。如果是内存队列,并且客户端没有检索到所有数据,则断电或应用程序崩溃将丢失所有数据。写入和读取数据库意味着数据将在此类问题中生存
保持模式简单,提供一个合理的索引,并且对于大多数使用来说应该足够快。您需要一些内务管理代码来保持数据库干净,但是使用SQL或类似于ORM的Sequel或ActiveRecord很容易做到这一点。对于连接到服务器的客户端,这听起来像是典型的客户端/服务器配置,一些客户端发送数据,另一些客户端请求数据。有什么理由不使用标准的HTTP客户机/服务器,即web服务器,而不是重新发明轮子?使用Sinatra或Padrino,甚至Rails,您将完成大部分工作 如何跨线程存储数据
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
Ruby的线程模块包括,用于在线程之间移动数据。文档页面有一个示例,应该会有所帮助
使用队列的相同想法也适用于使用表。我建议使用数据库作为队列供您使用,而不是在内存中使用。如果是内存队列,并且客户端没有检索到所有数据,则断电或应用程序崩溃将丢失所有数据。写入和读取数据库意味着数据将在此类问题中生存
保持模式简单,提供一个合理的索引,并且对于大多数使用来说应该足够快。您需要一些内务管理代码来保持数据库干净,但使用SQL或类似于Sequel或ActiveRecord的ORM很容易。关于让服务器“重新发送”数据到客户端:数据是回显到发送客户端,还是转发到另一个客户端?听起来您还没有真正决定它应该如何工作。服务器应该将数据转发给客户端服务器如何找到客户端?客户端将连接到服务器并发送一个值为viewer的字符串输入让服务器“重新发送”数据给客户端:数据是否回显到发送客户端,还是正在转发给另一个客户?听起来您还没有真正决定它应该如何工作。服务器应该将数据转发到客户端。服务器如何找到客户端?客户端将连接到服务器并使用值查看器发送字符串输入