动态服务器发现列表



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

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

高级功能将是有用的。比如:

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

有人知道这样的服务吗?我知道有开放的协议和服务器来做本地局域网服务发现,但这将是一个广域网服务。

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

  • XRDS(可扩展资源描述符序列)。
  • XMPP服务发现协议。

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

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

最后,我找到了一个叫做seap (SErvice Announcement Protocol)的东西。它是旧的,摇摇晃晃的,源代码可能是合适的,它是用C和Perl编写的,它是一个拼凑,但它似乎可以做你想要的,在某种程度上。

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

我的建议吗?阅读上面提到的协议和来源以获得灵感(我将从seap开始),然后自己编写、实现和发布通用(可能基于xml)协议。所有现有的代码似乎都是特定于应用程序的,难以理解的,或者是拼凑的。

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

  • database (table: 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上使用wget*与crontab,在windows上使用wget.exe与任务调度程序。

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

最新更新