|
|
|
|
 关于tcp server 的几个简单问题 - benjiam [ 2006-01-18 10:58 | 1,458 byte(s)]
 Re: 关于tcp server 的几个简单问题 - hsen [ 2006-01-18 16:33 | 201 byte(s)]
 Re: 关于tcp server 的几个简单问题 - benjiam [ 2006-01-19 18:38 | 205 byte(s)]
 Re: 关于tcp server 的几个简单问题 - hsen [ 2006-01-18 16:29 | 40 byte(s)]
 Re: 关于tcp server 的几个简单问题 - lonelyflyer [ 2006-01-18 12:46 | 24 byte(s)]
 Re: 关于tcp server 的几个简单问题 - benjiam [ 2006-01-18 13:40 | 64 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
关于tcp server 的几个简单问题
现在在做一个IM 服务器练手 有几个问题请教
关于在线用户的问题:
因为上下线都需要检查用户 我目前采用了map<string ,user *>做法
通过string 来找user *
然后把消息传给它 。 我感觉问题很大 。
首先用户多了,效率太低。而且因为上下线都需要锁定整体。我感觉到了最后这会出现
很多线不停的锁 这个块资源
2 用户上线以后,需要检索用户是否在线。当用户的朋友表很大(我明白了M$ 为什么只准250个朋友了)
那简直就是一种灾难啊。 而且如果用户不断上下线,都需要对他所有的朋友传资料。这是会造成系统”颠簸“吧
应该采用那种数据结构做好呢?
关于线程问题
目前我用了bsd 和 linux 系统 。采用单线程单用户来做的。线程的建立有限制(主要是内存)。到后来就建立不料了。
那么应该改用那种模式比较好呢?
关于内存
bsd linux 系统每个系统有4G 空间。但是你绝对不可能申请到很多的。 我的1G ram suse 9.3 intel 32 大概只有800M
可以申请。再多就失败了。usenet 上老外说 用64位cpu 就没事情了。.... 那么代码上怎么做,可以提高呢?以后换到2G 3G
ram 的服务器以后,可以完全使用服务器的大内存呢?
关于端口
据我所知道的tcp 知识,应该最多只有6万多端口可以用 也就是60K 而已。坛子里说他们的项目争取10w 用户单机在线。
edokey 有600K 用户在线。神啊 这怎么做的?
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
|
你应该用 hash_map<int, user *> 做一个全局的在线用户表,如果用户上线,插入这个用户,把用户状态置为需要通知好友,过一定的时间遍历一下如果有需要通知的,通知一下就行了。用户下线也用这个方法。
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
hash_map<int, user *> 做一个全局的在线用户表
我目前使用map <string , user*> 做的全局表
不知道效率低多少
因为用户是用email 来登陆的
|
|
|
[Original]
[Print]
[Top]
|
|
« Previous thread
C 语言 求助 |
C/C++编程版
第20页 |
Next thread »
一个通用的Makefile |
|