gpt4 book ai didi

Ruby tcpserver 客户端服务器

转载 作者:太空宇宙 更新时间:2023-11-03 16:57:48 27 4
gpt4 key购买 nike

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

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,您将基本完成。

How can I have data stored across threads?

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

使用队列的相同想法也适用于使用表。我建议使用数据库作为您使用的队列,而不是在内存中执行。如果它是内存队列并且客户端没有检索到所有内容,则断电或应用程序崩溃将丢失所有数据。写入和读取数据库意味着数据可以在此类问题中幸存下来。

保持架构简单,为其提供合理的索引,并且对于大多数用途来说它应该足够快。您需要一些管理代码来保持数据库清洁,但使用 SQL 或像 Sequel 或 ActiveRecord 这样的 ORM 很容易。

关于Ruby tcpserver 客户端服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372911/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com