首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

怎么设计多线程IM服务器

2012-03-21 
如何设计多线程IM服务器server方法是:accept()返回new socketfd, 之后创建new thread 用于处理与客户端的

如何设计多线程IM服务器
server方法是:accept()返回new socketfd, 之后创建new thread 用于处理与客户端的消息。
问题来了:
  如果连接的client多了,如何处理、保存“线程号”? 因为如果其中的一个client请求关闭,势必在server这边需要关闭对应的thread,我怎么去找到这个thread ID?。

[解决办法]
是的,方法很多,可以使用map,纯C的话可以使用一个stuct数组来保存。

IM服务器绝不可能这么简单来一个请求就开一个线程,效率太低。楼主看看win socket的几种I/O模型,这是很基本的知识
[解决办法]
数据结构,数据结构~
C++的话可以用map最简单。
注意系统线程数的限制。还有select的限制。小系统的话,1客户1线程的模式还算简单,用户多了的话,必须用其他的多路复用技术了。
[解决办法]
IM服务器做单线程select即可, 多线程编码与效率非常差, 因为涉及到用户间信息传递, 就避免不了访问全局在线用户列表, 就避免不了加锁同步, 编码的复杂性与效率都加大了, 根本没有哪个产品会用多线程做IM.


单线程select, 配合master-worker的多进程模型即可,参考lighttpd架构.

热点排行