查看完整版本: [-- 关于用QTcpServer创建多线程的问题 --]

QTCN开发网 -> Qt基础编程 -> 关于用QTcpServer创建多线程的问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

y1363386323 2016-12-16 16:42

关于用QTcpServer创建多线程的问题

最近在做服务器与客户端的程序,听说服务器端QTcpServer要用到多线程,网上的教程是为每一个连接的客户端分别创建一个线程。可有一个问题,假如有10000个客户端连接了这个服务器,按照网上的教程,那岂不是要新建10000个线程?这样做估计电脑都快死机了吧!
有没有谁做过这方面的程序,求助啊

bran_lee 2016-12-16 17:02
那要看你应用的场景是不是真的需要常连接,不是非要用TCP的,有时用UDP也是可以的,如果确实要用TCP那也没办法,况且如果有那么大量的客户端,也不可能用普通的PC做服务器了吧。

y1363386323 2016-12-16 17:57
bran_lee:那要看你应用的场景是不是真的需要常连接,不是非要用TCP的,有时用UDP也是可以的,如果确实要用TCP那也没办法,况且如果有那么大量的客户端,也不可能用普通的PC做服务器了吧。
(2016-12-16 17:02)

不能用UDP啊,听说UPD会遗失数据。
我想问下,一般的服务器都是为每一个连接来的客户端单独创建一个线程吗?
我有一个想法,就是把10000个连接来的客户端放进一个线程里执行,只是这种方法我用代码写不出来

yanwuyue 2016-12-17 21:53
刚好我也写了个TCPServer,我的每个链接不是一直通讯,采用的一个线程挂几个TCP链接的方案
我引用了https://github.com/dushibaiyu/QtTcpThreadServer

15145093145 2016-12-19 08:43
mfc qt socket这种框架作 几百的并发还行, 你这种 近1万的 肯定不行, 得用专用的网络框架

java  mina
c++ ace boostasio  libevent
js  node.js

15145093145 2016-12-19 08:44
c++的话,

研究过一段ace  最后放弃了,就像网上说的一样,他是研究用的,代码也得很炫,但简单问题复杂化

推荐 boost.asio 轻量级

圣域天子 2016-12-19 08:51
推荐去了解一下IOCP, EPOLL

lxdmp 2016-12-19 21:13
可以找些服务端开发的资料,对单机来说无非就是多进程、单进程多线程、IO复用这几种。

至于Qt,封装的是具体平台的接口,比如windows下最后使用的是WSAAsyncSelect,做一般的桌面/客户端应用是足够的。

如果真的有大量连接的需求,可以借鉴“连接服务器/业务服务器”的想法:可以将一个线程专门做io复用,linux下用libev或libevent,windows下自己封装下iocp,然后post到qt的主线程。


查看完整版本: [-- 关于用QTcpServer创建多线程的问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled