我应该使用哪些技术来构建心跳系统?

发布于 2024-10-21 13:01:20 字数 305 浏览 0 评论 0原文

我必须构建一个心跳系统(即网络上的一些(大约 10 个)节点每隔几秒向中央节点发送定期“心跳”)。这些节点是 ubuntu 机器。那么您对以下选择有什么建议:

  • TCP/UDP?
  • 发送消息的语言/软件?
  • 服务器架构——多线程或多进程等?

心跳的目的是快速找到任何发生故障的节点,或者节点是否无法与中央服务器通信。客户端节点上的性能是一个问题,所以我不想使用java(因为这需要安装jvm)。

PS:我们稍后可能还需要传递一些带有“心跳”消息的文本,因此我们希望在开发系统时牢记这一点。

I have to build a heartbeat system (i.e. some(about 10) nodes on a network send regular "heartbeats" every few seconds to a central node). These nodes are ubuntu machines. So what would you suggest for the following choices :

  • TCP/UDP?
  • Language/software to send the messages?
  • Server architecture - multiple threads or multiple processes etc.?

The aim of the heartbeats is to quickly find any nodes that go down, or if nodes can't communicate with the central server. Performance on the client nodes is an issue, so I don't want to use java (because that would require installing a jvm).

PS: We may later need to also pass some text with the "heartbeat" messages, so we want to develop the system keeping that in mind.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

动听の歌 2024-10-28 13:01:20

一个非常简单的单向“ping”应用程序就足够了。我将在服务器上使用单个 UDP 套接字,列出端口 foo 上的传入消息,并使用 在每个客户端上使用单个 UDP 套接字从客户端发送“我还活着”消息sendTo 处于带有 sleep 的无限循环中。不需要花哨的线程/进程。

您可以通过 recvFrom 地址或在数据包有效负载中包含客户端 ID 来区分服务器上的客户端。然后,您可以跟踪每个客户端上次发送 ping 的时间。您可能需要服务器上有多个线程来在检查超时时利用阻塞接收。或者使用 select 和一个小的超时/暂停来轮询套接字。

Beej 有一个关于如何用 C 语言完成所有这些操作的出色指南: http://beej.us/guide/bgnet/output/html/multipage/index.html" rel="nofollow">http:// /beej.us/guide/bgnet/output/html/multipage/index.html

A really simple one-directional "ping" application should suffice. I'd use a single UDP socket at the server, listing for incoming messages on port foo and send "i'm alive" messages from the clients with a single UDP socket at each client with sendTo in an infinite loop with a sleep. No fancy threads/processes needed.

You can distinguish the clients at the server either by their recvFrom address or by including a client id in the packet payload. You can then keep track of the last time each client sent a ping. You might need more than one thread on the server to make use of blocking receives while checking for timeouts. Or use select and a small timeout/pause to poll the socket.

Beej has an excellent guide how to do all of this in C: http://beej.us/guide/bgnet/output/html/multipage/index.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文