4

我想创建一个应用程序服务器可以联系的 Web 服务,以将自身添加到实现该应用程序的服务器列表中。然后,客户端可以联系该服务以获取服务器列表。类似于minecraft 的心跳如何将您的服务器添加到主服务器列表。

我可以很容易地自己实现它,但我希望有人已经创建了这样的东西。

高级功能会很有用。像:

  • 允许客户端对特定于应用程序的属性(例如当前连接到服务器的用户数)执行查询
  • 将服务器列表分布在多台机器上
  • 如果服务器在一段时间内未发送心跳,则将列表中的服务器条目超时

有人知道这样的服务吗?我知道有用于进行本地 LAN 服务发现的开放协议和服务器,但这将是一个 WAN 服务。

4

2 回答 2

1

基本上,你可以自己写,虽然我不知道是否有人有公开的(我在 10 多年前写了一个,但是是为一家公司写的)。

  • 数据库(TableCols:自动计数器、svr_name、svr_ip、check_in_time、any-other-data)
  • 接收心跳的代码 ( http://<you-app.com>?svr_name=XYZ&svr_ip=P.Q.R.S)
  • 列出特定 check_in_time 内的服务器的代码
  • 偶尔做一些大扫除的代码(例如:清除旧记录)

要发送心跳,您只需发送 http:// 调用,在 Linux 上使用 wget* 和 crontab,在 Windows 上使用 wget.exe 和任务调度程序。

它是特定于应用程序的,因此即使您自己编写了一个,其他人也无法在不修改源代码的情况下使用它。

于 2011-11-05T03:11:11.783 回答
1

我能找到的与您的预期应用程序相关的协议如下:

XRDS文档是迟钝的,但您可以推送 XML 格式的服务描述服务类型规范可能是通用的,但我因为试图破译委员会的说法而头疼。

XMPP 服务发现协议(以前称为 Jabber 协议的一部分)看起来也很有希望,但似乎即使您可以推送您的服务描述,他们也希望它是此列表中提到的服务之一。扩展它会使它变得非标准。

最后,我发现了一个叫做seap(服务公告协议)的东西。它很旧,摇摇晃晃,来源可能是适当的,它是用 C 和 Perl 编写的,它是一个杂项,但它似乎可以做你想做的事,有点。

似乎推动服务公告脉冲是一个特定于应用程序且微不足道的问题,几乎没有人考虑解决一般情况。

我的建议?阅读上面提到的协议和资源以获得灵感(我将从 seap 开始),然后自己编写、实现和发布一个通用(可能基于 xml)协议。所有现有的似乎要么是特定于应用程序的、难以理解的,要么是杂乱无章的。

于 2011-11-09T16:50:41.853 回答