通过channel做publish发送数据时TCP报文格式异常

zgh419566

我搭建了一台channel服务器 IP 192.168.27.24

通过192.168.27.18、192.168.27.19等两台服务器共64个进程连接到channel服务器

A程序发送消息可以成功

但是B程序发送的数据我发现TCP任务服务器接收不到任务数据,通过抓取发布(publish)数据的内容

发现tcp报文长度非常的短,发送帮看看这个是什么原因

Channel服务器

----------------------------------------------GLOBAL STATUS----------------------------------------------------
Workerman version:4.0.30          PHP version:7.3.22
start time:2022-03-25 01:17:15   run 85 days 10 hours   
load average: 0, 0.01, 0.05      event-loop:\Workerman\Events\Event
1 workers       1 processes
worker_name   exit_status      exit_count
ChannelServer 0                0
----------------------------------------------PROCESS STATUS---------------------------------------------------
pid     memory  listening             worker_name   connections send_fail timers  total_request qps    status
14576   4M      frame://0.0.0.0:12206 ChannelServer 64          0         0       13118754      0      [idle]
----------------------------------------------PROCESS STATUS---------------------------------------------------
Summary 4M      -                     -             64          0         0       13118754      0      [Summary] 

channel客户端

----------------------------------------- WORKERMAN -----------------------------------------
Workerman version:4.0.30          PHP version:7.3.22
------------------------------------------ WORKERS ------------------------------------------
proto   user            worker                 listen          processes    status           
tcp     www             mq_heartbeat_server    none            4             [OK]            
---------------------------------------------------------------------------------------------
Input "php start_mq_heartbeat.php stop" to stop. Start success.

Channel客户端程序

590 1 0
1个回答

six

短报文猜测是心跳数据。
另外两个抓包截图都是192.168.27.19的通讯,并没有 192.168.27.18 的抓包,所以 192.168.27.18 这台可能没有连上 channel服务器 IP 192.168.27.24 ?
截图
截图

  • zgh419566 2022-06-18

    我只抓了192.168.27.19的数据,如果这个是心跳数据,那就说明我的内容发布很可能没有成功,我再查一下。

  • zgh419566 2022-06-19

    各位,我初步找到原因了
    我研究了channel的底层代码,发现是通过async方式异步执行publish的,由于我的工作内容是写在rabbitmq的回调里面,而由于rabbitmq客户端做了while(true)循环,导致没有机会执行异步任务。

  • zgh419566 2022-06-19

    把rabbitmq消费者客户端改成Timer执行就好了
    //按照每个进程每秒处理1万条来设定定时器
    Timer::add( 0.0001 , function() {
    global $rabbit_channel;
    if( count($rabbit_channel->callbacks) > 0 ){
    $rabbit_channel->wait();
    }
    });

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