动态服务器发现列表

时间:2011-10-17 21:47:19

标签: minecraft service-discovery

我想创建一个Web服务,应用程序服务器可以联系该服务以将其自身添加到实现该应用程序的服务器列表中。然后,客户端可以联系该服务以获取服务器列表。类似于minecraft's heartbeats work将服务器添加到主服务器列表的方式。

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

高级功能非常有用。比如:

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

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

2 个答案:

答案 0 :(得分:1)

基本上,你可以自己写,虽然我不知道是否有人公开(我在10年前写过一篇,但对于一家公司)。

  • 数据库(TableCols:auto-counter,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上使用带有crontab的wget *,在Windows上使用带有任务调度程序的wget.exe。

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

答案 1 :(得分:1)

我能找到的与您的预期应用程序有任何关联的协议是:

XRDS 文档很麻烦,但您可以推送XML格式的服务描述。服务类型规范可能是通用的,但我试图破译委员会发言时会感到头痛。

XMPP服务发现协议(以前称为Jabber的协议的一部分)也看起来很有前景,但似乎即使你可以推送你的服务描述,他们也希望它是其中一个this list上提到的服务。扩展它会使它不标准。

最后,我发现了一些名为 seap (SErvice Announcement Protocol) 的内容。这是旧的,它是摇摇晃晃的,来源可能是正当的,它是用C和Perl编写的,它是一个kludge,但它似乎做你想要的,有点。

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

我的建议?阅读上面提到的协议和资源以获取灵感(我从seap开始),然后自己编写,实现和发布一个通用的(可能是基于xml的)协议。所有现有的似乎都是特定于应用程序,不可理解的或者是一个kludge。