【问题标题】:Data Structure for managing groups in a chat server用于管理聊天服务器中的组的数据结构
【发布时间】:2012-02-21 05:32:49
【问题描述】:

我有一个使用二进制套接字的闪存聊天客户端和一个使用套接字和 libev 的 C/linux 中的服务器。我让发送和接收消息的一切工作正常,但现在我进入了更复杂的步骤。

对于我的聊天服务器,我会将用户分组为 15 个组。服务器需要为每个用户提供一个唯一的 ID,并且能够快速确定用户所在的组以将消息广播给其他 14 个用户.我认为服务器可以为每个套接字连接使用文件描述符,因为它们都应该是唯一的。

问题是这样的:你得到了一个从 libev 为某个文件描述符触发的读取事件。您现在需要快速确定这个 FD 属于哪个组,然后将消息广播给组中的每个人。 解决这个问题最好的数据结构是什么?

【问题讨论】:

    标签: c linux data-structures


    【解决方案1】:

    哈希表。 让每个用户都有一个与之关联的 groupID,hashTable 将使用 groupID 作为键,使用 UserID 数组作为值。

    【讨论】:

    • 这听起来是个不错的解决方案。使用 libev 时,我认为我无法控制传递给读​​取事件的参数。 ev_io 结构是我必须使用的所有结构,它有一个用于 FD 的 int 结构,仅此而已。不过,我认为您正在做某事,我会尝试想办法解决这个问题。
    • 我唯一能想到的就是在 FD 上散列一次以找到 groupID,然后在 groupID 上再次散列以找到 userID 的数组。不过,拥有两个哈希表和计算两个哈希可能是一个杀手。
    • 如果您认为两次哈希表查找会使您的性能无法接受,那么在通过网络套接字执行 I/O 时,您的设置会出现一些非常奇怪的问题。您要为多少个同时用户设计这个尺寸?几十万?
    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2018-04-01
    • 2017-01-04
    • 1970-01-01
    • 2011-08-05
    • 2011-11-19
    • 2011-08-13
    相关资源
    最近更新 更多