2009-01-13 84 views
3

最近,我一直在阅读IRC协议(RFC 1459,2810-2813),并且我正在考虑实现我自己的服务器。如何使用“拥有”昵称实现IRC服务器?

我不一定会虔诚地遵守IRC协议(毕竟我是为了好玩而做这件事),但我喜欢的一件事情是网络可以包含多个服务器透明地。

有很多事情我不喜欢协议或IRC规范。首先是绰号不是拥有的。尽管像NickServ这样的服务存在,但它们不是官方协议的一部分。另外另一方面,实施类似NickServ 正确那种失败的分配的目的(即有会是一个地方NickServ运行,并为它一个数据存储)。

我希望能有一种方法来管理每个服务器的昵称。问题在于,如果您有两台具有某些注册昵称的服务器,然后它们连接起来,则可能发生冲突。

有没有办法避免这种情况,而不使用一个中央数据存储?那就是:是否有可能让服务器松散地连接起来(使它们各自作为一个独立实体存在,但也可以相互连接)并保持昵称之间的唯一性?

我意识到这个问题是模糊的,但我想不出它的措辞一个更好的方式。我正在寻找更多的建议,而不是我的实际是/否的答案。因此,如果任何人对如何在网络中完成昵称唯一性以及仍然保持服务器独立性有任何想法,我会有兴趣听到它。请注意严格遵守IRC协议并不是必要的;改变事情以适应我的目的我没有问题。 :)

+0

对我来说这个问题是'上帝为什么好'? – GEOCHET 2009-01-13 17:47:14

+0

为了好玩。这就是我们在这里:FUN。:) – FreeMemory 2009-01-13 17:50:11

回答

3

有一个简单的解决方案如果你不关心严格实现IRC服务器,而是实现分布式消息系统这 IRC,但不准确IRC

简单的解决方案是使用“nick @ host”形式的昵称,非常像电子邮件。因此,我的昵称可以是“[email protected]”,而不仅仅是“mipadi”。所以我只注册了您的服务器,但是当您的服务器与其他人建立了另一个大型聊天网络时,您可以轻松将所有用户名组合在一起。在otherserver.net上可能会有一个“mipadi”,但是我们的昵称变成了“[email protected]”和“[email protected]”,一切都很酷。

当然,这与IRC有很大不同。:)

0

他们必须意识到对方。如果没有,则无法阻止共享昵称。如果是这样,你只需要在后端传输更新。为了防止同时注册,您需要一个阻止,请求所有其他服务器的许可并响应的事务系统。

为了防止同时注册中断期间,你没有选择,只能时间戳登记,并删除所有,但最后一个(或随机的真正同步)注册的昵称的副本。

考虑到这些服务器最初并没有被合并,这并不是很漂亮。

0

如果您的服务器实例互相信任,您仍然可以在没有中央实例的情况下实施昵称所有权,如果

  • 当用户注册了一个缺口,它是与他连接了当前服务器注册
  • 当服务器接收到注册,它不知道的,就将该信息转发到所有其它服务器,唐“T知道它(可能需要一个智能的算法,以避免垃圾邮件的网络)
  • 当服务器重新连接到另一台服务器然后尝试同步注册尼克斯的名单和服务器处理该缺口
  • 如果有是该同步期间的碰撞,则使用较早的注册,并将较新的注册标记为无效

如果你不能信任你的服务器,那么它会变得更加困难,因为服务器可以很容易地声明每个用户名,甚至要求每个用户登记最早的注册。

0

由于您试图想出一些新的东西,想到这一点,只需在服务器之外进行通信时简单地将服务器的某些内容作为昵称的一部分。因此,如果你想在不同的服务器上发送消息,你可能会有类似user @ server

如果你不需要它们完全分开,你可能要考虑创建一种多主复制的数据库账户。每台服务器都存储帐户数据库的完整副本,每台服务器都可以创建新帐户,并尽可能将其复制到其他服务器。尽管如此,你可能仍然需要处理碰撞。

0

尽管像NickServ这样的服务存在,但它们不是官方协议的一部分。

服务不是官方协议的一部分,因为它们与协议无关。他们是有权限的机器人。没有理由不能在每台服务器上运行一个服务器,但这确实会使其难以维护。

如果你要走这条路,我可能会建议常用的“多主”数据库复制技术。如果有人收到一个写入信号(就你而言,新用户被创建或更新等),它会将数据发送到所有其他节点。你必须小心,虽然。如果其中一个节点在其他节点进行更新时处于脱机状态,则需要知道重新同步时重新连接。

另一种技术如上所述,但是相反。数据只在需要时在节点之间交换。例如,如果用户尝试登录没有数据的节点,它将查询其他节点,并发出移动命令以将所有数据传送到该节点。这比复制版本可能更不痛苦,但如果有人在与包装断开连接的节点上注册重复的昵称,则可能会出现严重的netsplits问题。

一种消除网络分割问题的技术是让聊天节点和它们的机器人感知网络。当他们分裂时,他们可能不应该允许任何写作行为......但是如果你分裂很多,这可能会影响你的网络。

你也必须问这可能有多安全,也可能不安全。 IRC网络节点是为了性能而分发的,但它们不是“安全的”。正因为如此,服务机器人通常集中运行,以保持对其运行的最终控制。如果您分发漫游器并且远程节点被黑客入侵,他们可能有权访问整个用户数据库(取决于型号)。