指定协议发送时,打包两次

bijingjieshen

求大神帮我解答一个问题,代码如下:


case 'web_control':
    //获取要控制的车的client_id
    $car_client_id = self::$db->select('client_id')->from('carinfo')->where("car_id = '{$POST}'")->query();

    $control_data = array( "opType" => $POST,
        "opVal" => $POST);

    //判断车载端是否在线
    if(Gateway::isOnline($car_client_id))
    {
        $control_success = array( "action" => "control",
            "result" => 0);
        Gateway::sendToClient($client_id, json_encode($control_success));
        Gateway::sendToClient($car_client_id, Workerman\Protocols\Json::encode((json_encode($control_data))));
    }
    else
    {
        $control_fail = array( "action" => "control",
            "result" => -1);
        Gateway::sendToClient($client_id, json_encode($control_fail));
    }

    break;

通过http协议发过来数据,通过指定协议转发时,正常的数据协议格式应该是如下这样的
"þ12345678900987654321{"opType":"1","opVal":"1"}»»"

但是真实的是这样的
"þ?12345678900987654321þ12345678900987654321{"opType":"1","opVal":"1"}»»»»"
感觉Workerman\Protocols\Json::encode被调用了两次,这是什么问题

3030 2 0
2个回答

walkor

Workerman\Protocols\Json::encode 会被自动调用。发送时框架会自动根据对方协议encode。

不管用了几种协议,业务代码都不用考虑通讯协议问题,通讯协议对于开发者是透明的。

  • 暂无评论
bijingjieshen

workerman已经记录下这个client_id的通信协议了,所以不需要指定了。很强!!!

  • 暂无评论
年代过于久远,无法发表回答
🔝