首页| 论坛| 消息

回复: 多线程服务器问题
#11 [渡世白玉 01-11 00:07]
qtTcpserver好像也是异步的、、同时发送就行了、、
https://github.com/dushibaiyu/QtTcpThreadServer
每个连接一个线程、、
直接继承QTcpSocket实现处理其实就行了、、不是大型数据处理,仅仅储存,其实用不大到、、
#12 [baby1289 09-02 10:43]
为每一个客户端开一个线程可以,可以子线程接受,但是怎么把写的函数也放到线程中执行,因为读写的socket要用一个啊
#13 [firebolt 09-03 19:58]
如果你服务器端需要对某个客户端做操作,你可以用QSet把每个线程对象指针都存下来。
#14 [angelus 09-05 09:27]
多线程编程就是 多个socket对应服务器的多个socket,服务器的每个socket都在不同的线程上,多个客户端发送的消息分别在服务器不同线程上进行处理,瓶颈其实在数据库处理上,如果只是小规模不用担心并发写入问题,如果数据太多,建议服务器多线程接收的数据进行简单格式处理,然后都塞到一个共有队列中去,这个队列可以是程序内,也可以是其他机器的队列服务器,然后逐一去把队列的内容写入数据库,这样异步处理可以最大化解决服务器多线程并发压力

每个客户端的连接,都会在服务器创建一个独立的线程进行处理,所有有多少客户端连接进来,就会创建多少个线程类,这个也是服务器压力的来源,cpu,内存,每个线程都需要占用这些资源的,除非客户端断开,不然线程会一直存在的,在线程上创建的对象也都会存在

线程池本身是为了管理有限的线程,最大化利用线程,你这个服务器程序,不需要用到线程池,除非你要写更高效的服务器,不然线程池都是没必要的

你在程序里创建的线程指针不需要自己去管理
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
这个信号槽会在线程结束时候qt代你延迟释放线程资源,线程什么时候结束,取决你让它什么时候结束,这些都是写代码保证的

<< 1 2 3 >> (3/3)

回复 发表
主题 版块