一、功能简述
QT6.4正式增加了QHttpServer,在这之前是可以使用QTcpServer进行自定义通讯。这里是想要实现一个简单的通过Tcp为外部提供ocr识别功能的demo。
关于QTcpServer,像其他很多语言一样,都是支持阻塞和非阻塞两种方式。这里使用的是非阻塞模式,个人感觉QT的封装是I/O多路复用的非常清晰易用的典范,相比Java中的nio包考虑的方方面面就更多,但是也更加抽象,不是特别易于理解。
这里使用QTcpServer大致流程如下:
1、创建QTcpServer,并实现newConnectionSlot等待新连接。
2、每当一个新连接到来,就会得到对应的一个新的socket,绑定socket的readyRead信号(这里就是i/o多路复用的体现,不需要程序员进行阻塞线程等待消息,而是QT来轮询,有了消息调用我们的槽函数)。
3、每当得到一个socket,就给socket命名,将socket保存到一个类里面,并将这个类插入到一个集合中,方便后续识别/管理/销毁。
4、socket接收消息后,解析并启动新线程进行ocr识别,完成后返回结果。
5、socket断开后销毁各种对象