0

我想创建一个并行发送和接收数据的应用程序,例如聊天应用程序。它获取输入并发送一些输出,但不仅限于接收数据。我想使用 UDP 作为协议。我正在使用红宝石 1.9.3。

这是接收数据的代码:

@s = UDPSocket.new
@s.bind(localhost, 1234)

Socket.udp_server_loop_on([@s]) do |message, sender|
  #do something
end

此代码应该独立于应用程序的其余部分运行,它不应该阻止它。

我应该使用线程吗?我从未尝试过网络程序,也不是专业的开发人员,所以请耐心等待。也许我的代码/设计只是废话,所以请随时告诉我这是如何由专业人士完成的!;)

4

2 回答 2

2

UDP 非常自然地为自己提供了这种非阻塞处理,因为您通过套接字接收单独的原子消息并且可以以相同的方式回复。

在该循环中,请确保快速处理并发送响应消息。如果您进行长时间的阻塞调用,它将阻塞您的循环并影响响应时间。

EventMachine提供了一种用于编写异步应用程序的结构,并且有自己的方法来处理 UDP 和 TCP 套接字。

不要忘记查看已经实施的解决方案。对于聊天应用程序,Socket.IO是一个很好的起点。

于 2013-01-03T18:55:23.900 回答
1

您应该看一下可以Eventmachine非常有效地处理阻塞 IO 的 gem。除其他外,它还提供 TCP 和 UDP 服务器/客户端 API。

于 2013-01-03T18:50:14.530 回答