- 主题:请教socket编程如何保证响应的时效性
多线程的时候就是会这么碰巧的, 我不做多线程就很稳健。多线程的时候,就是会有在执行readyRead信号的槽函数的时候,有数据到来,然后并不会发出readyRead信号,时不时出现这种情况。
【 在 clyu1981 的大作中提到: 】
: 感觉不太可能啊?
: 其它事件函数也没有耗费时间比较长的?
--
FROM 45.78.57.*
有 while (socket.bytesAvailabe() > 0) { socket.read(...); ... } 这样子。
【 在 hengcuiyuan 的大作中提到: 】
: 用while我也想过,这就要设置超时,我看手册上又说响应readyRead信号的槽函数里面不能用processEvent,这个超时又该如何设置呢?我又怎么知道什么时候所有信息读完了呢?
--
FROM 223.104.162.*
我已经在生产环境用一年多了。不过可能很多 corner case 没搞定。反正你也懂 Qt 啊。。有时候帮忙 debug 一下。。
【 在 missdeer 的大作中提到: 】
: 这个成熟度如何了,能在生产环境用吗?我倒是真有coroutine这种需求
--
FROM 223.104.162.*
之前也遇到过这种情况,应该是qt的底层问题,后来我就抛弃了它。
【 在 hengcuiyuan 的大作中提到: 】
: 多线程的时候就是会这么碰巧的, 我不做多线程就很稳健。多线程的时候,就是会有在执行readyRead信号的槽函数的时候,有数据到来,然后并不会发出readyRead信号,时不时出现这种情况。
:
--
FROM 112.9.184.*
弃用之后呢,改用什么来做通信了?
【 在 polarx 的大作中提到: 】
: 之前也遇到过这种情况,应该是qt的底层问题,后来我就抛弃了它。
--
FROM 113.70.91.*
这样也不能绝对保证,如果在while循环之后,函数返回之前,有数据到达呢?还是会丢数据的。当然,如果数据包里面有序列号就好办,隔一段时间收一遍,把同样序列号的包组装到一起。我现在被别人定义了包结构,里面没有序列号。
【 在 hgoldfish 的大作中提到: 】
: 有 while (socket.bytesAvailabe() > 0) { socket.read(...); ... } 这样子。
:
--
FROM 113.70.91.*
如果一定要用框架,我推荐你用ZMQ。感兴趣的话,可以自己写吧,C++不都是喜欢造轮子么。
【 在 hengcuiyuan 的大作中提到: 】
: 弃用之后呢,改用什么来做通信了?
:
--
FROM 112.9.184.*
牛,我还不是专职的程序员,这个对我来讲难度较大!
【 在 polarx 的大作中提到: 】
: 如果一定要用框架,我推荐你用ZMQ。感兴趣的话,可以自己写吧,C++不都是喜欢造轮子么。
--
FROM 185.212.57.*
就不是专职的,才有意思。为公司打工搞这些太无聊了。
【 在 hengcuiyuan 的大作中提到: 】
: 牛,我还不是专职的程序员,这个对我来讲难度较大!
【 在 polarx 的大作中提到: 】
: 如果一定要用框架,我...
--
FROM 39.89.25.*
这个很简单,没有readyRead的时候每隔50ms尝试读一次就好了
【 在 hengcuiyuan 的大作中提到: 】
: qt搞通信是有点难度。研究了一下,可能是readyRead信号的触发问题,我是多线程环境,如果readyRead信号触发了槽函数的执行,而在槽函数未执行完时,又有新的数据到来,好像不会再触发readRead信号,然后我就永远无法读到那后半部分到来的数据了,然后程序就会报通信超时。
--
FROM 114.253.38.*