日期:2014-05-18  浏览次数:20742 次

TCP/IP 异步 多线程 数据同步程序的优化,喜欢优化方案的朋友过来看看
估计很快就会被列入标题党了。

入正题了,项目说明:一个基于TCP/IP的通讯程序(可以理解为变种QQ),C端负责发送订单(单客户端数据量60条/分,客户端数量预计上万,因为是全国范围),S端接收后,先存,再处理,再分发给其它在线C端。

S端异步+线程进行监测连接和数据包到达;
C与S的连接目前是一个端口,考虑到粘包情况,S端独立线程收包,随后独立线程判断包的完整性,再提交给处理线程进行处理(判断完整性和处理用了数据同步),再接着提交给分发线程(负责入库和分发)。

附加说明:数据在内存的存储用了hashtable。每个订单的数据大概是200-300个汉字。

程序运行于外网。


问题:就目前这种情况,这种方案有什么可优化的。或是有什么好的方案。望坛友讨论一下。


------解决方案--------------------
我没有做过TCP/IP的,但是接触过CANOpen的,我觉得会不会适合“总线型结构”?
1)C端发送订单,发送的时候在订单前加上目标地址(可以是客户端的IP或MAC地址),然后发到总线上(因特网);
2)每个客户端都可以在总线上监听到这帧报文,但是只有与这帧报文里的报头(预定义客户端的MAC地址)相匹配的客户端才会接受,其他的客户端则不接受;
3)这个收到报文的S端开始处理数据,于此同时,总线已经空闲,于是C端此时可以继续给其他的MAC地址的客户端发送报文;
4)第一个S端处理完数据之后,将带有目标MAC地址的报文发送出去,目标地址便接受这帧报文;
但是这里就存在了一个问题:就是第二个目标地址可以接受总的发送端C端给它发送的报文,也可以接受其他处理数据完毕后中转的S端给他发送的报文;
这就必须要定义一个优先级,比如可以定义成S端总优先接受来自C端的报文,接受完了之后,才会接受来自其他S端的报文;

我是个菜鸟,TCP不懂,仅仅是来占个座,帮顶一下而已

顶贴