求大神帮我解答一个问题,代码如下:
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被调用了两次,这是什么问题
Workerman\Protocols\Json::encode 会被自动调用。发送时框架会自动根据对方协议encode。
不管用了几种协议,业务代码都不用考虑通讯协议问题,通讯协议对于开发者是透明的。
workerman已经记录下这个client_id的通信协议了,所以不需要指定了。很强!!!