在聊天服务器

在聊天服务器

问题描述:

管理组数据结构我使用二进制套接字和使用插座和libev在C/Linux的服务器闪存聊天客户端。我有一切正常工作发送和接收消息,但现在我正在进行更复杂的一步。在聊天服务器

对于我的聊天服务器,我将把用户分组到15个组中。服务器需要为每个用户设置一个唯一的ID,并且能够快速确定用户将哪个组广播到另一个14用户。我想服务器可以使用每个套接字连接的文件描述符,因为这些应该都是唯一的。

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

哈希表。 让每个用户具有与其和哈希表相关联的组ID将使用的用户ID的组识别符号作为键和数组作为值。

+0

这听起来像一个很好的解决方案。当使用libev时,我不相信我能控制传递给读​​取事件的参数。 ev_io结构就是我必须使用的,它有一个FD的int,就是这个。我认为你正在做的事情,我会试着想办法解决这个问题。 – 2012-02-21 06:26:35

+0

我能想到的唯一的事情是对FD一次哈希查找组ID,然后再散列的组ID找到用户ID的数组。有两个散列表和两个散列的计算可能是一个杀手。 – 2012-02-21 06:44:54

+0

如果你认为两个哈希表查找将是什么使你的表现是不可接受的,在网络套接字执行I/O的时候,有什么东西与你的设置严重怪异。您为此设置了多少个并发用户?数十万? – unwind 2012-02-21 08:13:21