• 5815阅读
  • 7回复

[提问]关于用QTcpServer创建多线程的问题 [复制链接]

上一主题 下一主题
离线y1363386323
 

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

只看该作者 1楼 发表于: 2016-12-16
那要看你应用的场景是不是真的需要常连接,不是非要用TCP的,有时用UDP也是可以的,如果确实要用TCP那也没办法,况且如果有那么大量的客户端,也不可能用普通的PC做服务器了吧。
当你只有锤子时,你看什么都像是钉子!
离线y1363386323

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

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

只看该作者 3楼 发表于: 2016-12-17
刚好我也写了个TCPServer,我的每个链接不是一直通讯,采用的一个线程挂几个TCP链接的方案
我引用了https://github.com/dushibaiyu/QtTcpThreadServer
离线15145093145

只看该作者 4楼 发表于: 2016-12-19
mfc qt socket这种框架作 几百的并发还行, 你这种 近1万的 肯定不行, 得用专用的网络框架

java  mina
c++ ace boostasio  libevent
js  node.js
离线15145093145

只看该作者 5楼 发表于: 2016-12-19
c++的话,

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

推荐 boost.asio 轻量级
离线圣域天子

只看该作者 6楼 发表于: 2016-12-19
推荐去了解一下IOCP, EPOLL
离线lxdmp

只看该作者 7楼 发表于: 2016-12-19
可以找些服务端开发的资料,对单机来说无非就是多进程、单进程多线程、IO复用这几种。

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

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