GatewayWorker 底层和mqtt疑惑

嘿嘿嘿嘿

1、在一个进程使用mqtt:
如果只开一个进程,在进程启动时订阅某个消息,如果接收到新消息时,上一条还没有处理完,是等上一条处理完成再处理下一条,还是会同时处理两个?
如果等待上一条处理完成之后才处理新的,那么堆积消息的最大数量是根据什么来的?或者最大堆积消息为多少条?
 2、GatewayWorker的websocket接收消息处理:
如果出现客户端延迟高发来的消息丢包GatewayWorker是如何处理的?
如果出现客户端延迟高发来的消息出现一条数据分成两个消息( 如消息{test:ceshi},第一条为{test,第二条为:ceshi} ),这个时候 到Event里是会合并成一条信息还是两条呢?
 
 

3521 1 0
1个回答

walkor

1、workerman作为mqtt客户端,当前消息处理完毕后mqtt服务端才会下发下一条消息,所以workerman这边不会有消息堆积
 
2、tcp数据传输是由操作系统底层完成的,丢包会重传,丢包重传也是由操作系统控制。应用层也就是GatewayWorker不用关心消息丢包,也无法干涉。如果tcp传输丢包严重,操作系统底层会尝试重传多次无果后会断开连接。
通讯协议的作用就是用来分包的,通讯协议会告诉GatewayWorker发来的tcp数据是否是一个完整的数据包,如果不是就会等待直到收到一个完整的消息。websocket也是通讯协议的一种,所以即使tcp传输过程中出现分包,GatewayWorker也会根据websocket协议收到完整的消息之后才会交给Events.php处理
 

年代过于久远,无法发表回答
🔝