• 251阅读
  • 5回复

[提问]tcp和http是同步还是异步 [复制链接]

上一主题 下一主题
离线介农酥
 

只看楼主 倒序阅读 楼主  发表于: 08-12
回复本帖可获得20RMB金钱奖励!
每人最多可获奖1次,奖池剩余0RMB金钱 (中奖几率40%)
这两天一直没弄明白HTTP是同步还是异步的,当HTTP get请求发出后,到读取响应的槽函数这段时间,本线程是否允许执行其他代码,接受其他线程的信号等,还是一直等到,直到响应完毕。


离线liulin188

只看该作者 1楼 发表于: 08-12
qt对于网络的所有实现基本都是异步的,可以自己实现同步阻塞功能
qt提供相关的信号,比如已连接,数据到达,发送,已断开。。
https://wiki.qt.io/Qt_5.12_Release
https://www.qt.io/blog/qt-5.13.2-released
https://www.qt.io/blog/qt-creator-4.10.2-released
离线笑颜

只看该作者 2楼 发表于: 08-13
回帖奖励+ 20
前段时间,有个客户说FTP连接我们公司的系统不能下载数据,我仔细研究了一下调用过程。
Qt的所有get请求底层都是用线程池实现的,所有相当于基本上就得一个不是你开辟的线程里面。
并且当时研究到qt的ftp请求,会使用HELP指令去获取信息,然而我们系统没实现这个指令并且返回了错误,所以就停止了后续所有请求。(我记得是这样,如果记错了别见怪)
离线onlyone

只看该作者 3楼 发表于: 08-16
回帖奖励+ 20
这个是异步的。如果不是异步,在网络不好时,执行线程就会卡死。如果是主线程执行,主线程就会卡死。
当然你自己也说了,你估计是新开了一个线程,在线程里面执行get,那么如果你的线程本来就是专门为做这件事情,新线程就做这一件事情,那么不能让线程退出。而是要执行类似postEvent的方式进入到消息循环中去。否则请求还没回,线程就退出了,那也有问题。
离线yunchao630

只看该作者 4楼 发表于: 08-20
你理解的同步异步可能不对。同步、异步是socket的属性,阻塞和非阻塞是应用逻辑。你应该问的是阻塞与非阻塞。答案是  线程是允许执行其他代码,接受其他线程的信号的,不必一直阻塞在这里
离线介农酥

只看该作者 5楼 发表于: 08-20
回 yunchao630 的帖子
yunchao630:你理解的同步异步可能不对。同步、异步是socket的属性,阻塞和非阻塞是应用逻辑。你应该问的是阻塞与非阻塞。答案是  线程是允许执行其他代码,接受其他线程的信号的,不必一直阻塞在这里 (2019-08-20 10:59) 

谢谢!
快速回复
限100 字节
 
上一个 下一个