1
3
有一个简单的解决方案 如果 你不在乎 严格地 实现一个IRC服务器,而不是实现一个分布式消息系统, 喜欢 IRC,但不是 确切地 IRC。 简单的解决方案是使用昵称的形式“nick@host”,很像电子邮件。因此,我的绰号不是“mipadi”,而是“mipadi@free memorys server.net”。所以我只注册你的服务器,但是当你的服务器与其他人连接形成另一个大的OLE聊天网络时,你可以很容易地将所有的用户名联合在一起。在otherserver.net上可能有一个“mipadi”,但是我们的昵称变成了“mipadi@free-memorys-server.net”和“mipadi@otherserver.net”,一切都很酷。 当然,这与IRC有很大的不同。:) |
2
0
他们必须互相了解。如果没有,就不能阻止共享昵称。如果是,您只需在后端传输更新。为了防止同时注册,您需要一个事务系统来阻止、请求所有其他服务器的权限并作出响应。 为了防止在停机期间同时注册,您别无选择,只能对注册进行时间戳,并删除除最后一个(或真正同时删除的一个随机)注册的尼克副本以外的所有副本。 考虑到这些服务器最初并没有合并,这不是很好。 |
3
0
你仍然可以在没有中心实例的情况下实现nick所有权, 如果 您的服务器实例相互信任。
如果您不能信任您的服务器,那么它将变得更加困难,因为服务器可以轻松地声明每个用户名,甚至为每个用户名声明最早的注册。 |
4
0
由于您正试图想出一些新的想法,所以在服务器外部进行通信时,您会突然想到服务器的独特之处,它是昵称的一部分。因此,如果您想在其他服务器上向用户发送消息,您可能会得到类似于user@server的消息。 如果不需要它们完全分离,您可能需要考虑创建某种类型的多主复制帐户数据库。其中,每个服务器都存储帐户数据库的完整副本,并且每个服务器都可以创建新帐户,这些帐户将尽可能复制到其他服务器。不过,有时你可能还得处理碰撞。 |
5
0
服务不是官方协议的一部分,因为它们与协议无关。他们是有权限的机器人。没有理由不能在每台服务器上运行一个服务器,但这确实会使它们更难维护。 如果您沿着这条路径走下去,我可能会建议使用常用的“多主”数据库复制技术。如果收到一个写入(在您的情况下,创建或更新一个新用户等),它会将数据发送到所有其他节点。不过你得小心点。如果一个节点在其他节点得到更新时处于脱机状态,则需要知道在重新连接时重新同步。 另一种方法是如上所述,但相反。数据只在需要时在节点之间交换。例如,如果一个用户试图登录一个没有数据的节点,它将查询其他节点并发出一个移动命令,以获取该节点的所有数据。这可能比复制版本的痛苦要小,但是如果有人在一个与包断开连接的节点上注册了一个重复的尼克,netsplits中可能会出现严重的问题。 消除netsplit问题的一种技术是使聊天节点及其僵尸netsplit感知。当它们被拆分时,它们可能不允许任何写操作…但这可能会影响你的网络,如果你分割很多。 你还得问问这有多安全。IRC网络节点的分布是为了提高性能,但它们并不“安全”。因此,服务机器人程序通常集中运行,以保持对其运行的最终控制。如果您分发了僵尸和远程节点,它们可能会访问整个用户数据库(取决于模型)。 |
user1246950 · 11分钟后java irc bot断开连接 8 年前 |
samwilber · Python:仅发送前缀时IRC bot崩溃 9 年前 |
user3125559 · 回调处理程序未插入字符串 10 年前 |
user2658455 · 在用C编写的IRC BOT中设置密码++ 11 年前 |
prole92 · ASP irc机器人在20分钟后掉落 12 年前 |
user1079988 · 向IRC机器人发送私人消息 12 年前 |