网站首页 > 教程分享 正文
这里主要是这样的Qt写了一个服务端,在开发环境下,没出现任何问题,但在生产环境下,就出现问题了。
使用Fiddler的简单抓了下包:
发现Body只有27045,而请求里面确是这样的。
这里就很有意思了。
这里的Qt服务端,在发送完数据后,会主动和客户端断开连接。不像其他的web服务器,需要等客户端来断开连接。
这里用curl请求会有报错:
transfer closed with 25527 bytes remaining to read
大体上的意思就还有这么多位的数据没读,通道就被关闭了。
在Qt服务端关于关闭的代码是这样的:
tcpSocket->write(HttpResponse::message(json->toJson()).toUtf8());
tcpSocket->waitForBytesWritten();
tcpSocket->disconnectFromHost();
并且这个tcpSocket->write的返回值,也是正确的,说明的确把要发送的数据送到了网卡中让其发送。并且waitForBytesWritten也是返回true的。
个人感觉主要的问题就是tcpSocket->waitForBytesWritten(),可能是Qt的一个BUG,我这里用的是5.5.1
感觉这里Qt做的没有我想象中的那样。
这里的解决办法有3个:
①数据分包发送,有些web服务器会把发送的数据分成几个包发送给客户端。这种方式就能解决上面的问题。
②简单修改下代码逻辑,比如改成了这样的:
qint64 writeSize = tcpSocket->write(HttpResponse::message(json->toJson()).toUtf8());
qDebug() << "writeSize: " << writeSize;
if(!tcpSocket->waitForBytesWritten(10 * 1000)){
qDebug() << "error:" << tcpSocket->errorString();
}
if(!tcpSocket->waitForDisconnected(10 * 1000)){
tcpSocket->disconnectFromHost();
}
delete json;
delete tcpSocket;
③加一个waitForDisconnected()如下:
tcpSocket->disconnectFromHost();
tcpSocket->waitForDisconnected();
建议优先用第三种,不行就再考虑第一种和第二种。
猜你喜欢
- 2024-12-25 MySQL数据查询太多会OOM吗? mysql为什么数据量多查询就慢
- 2024-12-25 一次Dubbo拥堵的分析 dubbo遇到的问题
- 2024-12-25 Java程序员使用JSSE实现SSL/TLS安全套接字
- 2024-12-25 阿瑟Java (44):HTTP、TCP/IP、Socket 的关联
- 2024-12-25 基于socket API之上的跨平台MQTT客户端源码分享
- 2024-12-25 Java编程-高并发情况下接口性能优化实践-提升吞吐量TPS
- 2024-12-25 在线客服(IM)系统源码分享 在线客服源码下载
- 2024-12-25 深入剖析阻塞式socket的timeout socket connect 阻塞
- 2024-12-25 推荐一个Java编写的长连接服务Netty-SocketIO
- 2024-12-25 Linux TCP RST情况 linux tcping
你 发表评论:
欢迎- 最近发表
-
- 微信外H5跳转小程序——组件(vue项目)
- 5种JavaScript实现页面跳转的方法,赶紧收藏
- 防止网站被恶意反向代理(如何防止恶意网站跳转)
- DeepSeek代码之旅2:卫星地图标记方法之——Pyside6实现
- 如何免费申请ssl,并且安装!(ssl 免费)
- 海报丨英勇精神 世代闪光(英雄精神代代传绘画)
- 使用浏览器访问PLC的自定义网页(使用浏览器访问plc的自定义网页是什么)
- 详解三类的友情链接不能交换(友情链接可以随便找链接加吗)
- 使用JavaScript如何获取网站网址(js语句如何获取网页元素)
- web开发-从facebook内置浏览器中网页,唤起Safari或chrome浏览器
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)