快过大年的时候还要问个技术问题

hsujk 2011-01-30 12:19:50
最近要做一个实时通讯程序,用一台电脑做服务器,处理大概50-100个终端发来的数据,采用的是UDP通讯。
服务器端的程序初步方案如下
1、在服务器上创建一Socket,采用基于Windows消息的异步选择机制,注册一消息响应函数负责接收数据。
2、同时启动50-100个数量不等的线程,线程数量视终端数量而定,每个线程负责一个终端。
3、主线程中的消息响应函数将接收来的数据放入接收队列。
4、由子线程从接收队列中分别取出属于自己终端发来的数据,处理完成后发还给终端。
各位技术达人,不知道此种设想可行否?有经验的朋友请给力一下。谢谢啊
...全文
100 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hsujk 2011-02-24
  • 打赏
  • 举报
回复
如果能达到300个,那足矣,散分了散分了。
我不懂电脑 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hsujk 的回复:]
呵呵,果然不出 Maconel所料,单核cpu1.1G,我才开动10个线程后,程序响应终端的速度慢的不得了,后改成Maconel的方案,从目前测试的效果看,还算不错,我担心的是用Windows消息来读取缓冲区中的数据,这种方式能达到多大的并发量呢?
[/Quote]

并发量不大,而且不能是计算密集型的,300个以下适合。
hsujk 2011-02-16
  • 打赏
  • 举报
回复
呵呵,果然不出 Maconel所料,单核cpu1.1G,我才开动10个线程后,程序响应终端的速度慢的不得了,后改成Maconel的方案,从目前测试的效果看,还算不错,我担心的是用Windows消息来读取缓冲区中的数据,这种方式能达到多大的并发量呢?
Maconel 2011-02-10
  • 打赏
  • 举报
回复
1.一个接收线程负责读socket数据到接收队列,一个发送线程负责从发送队列发送数据到socket,另外一个线程池中的若干个工作线程负责处理数据。

2.线程池中的每个线程从接收队列读数据,判断它是哪个client发过来的,处理后,写入发送队列。

3.没必要给每个client分配一个线程,根据请求的数据量,决定线程池中线程数量即可。如果处理过程只是cpu运算之类,不涉及与其他服务器的网络交互,或数据库操作,那么线程池中只需要一个线程即可,多个线程不但不会快,反而由于线程切换会导致更慢。这个要根据具体情况分析,测试。
BCBPLC 2011-02-07
  • 打赏
  • 举报
回复
用UDp控件,异步方式接收,不需要多线程;
hsujk 2011-02-07
  • 打赏
  • 举报
回复
至于通讯协议,终端机已经固定是UDP协议了,俺只负责服务器上的实时通讯程序。
Jonix 2011-02-05
  • 打赏
  • 举报
回复
UDP 不稳定,一般传正式数据,还是使用TCP保险。

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧