getawaywoker的onMessage中写入post请求isOnline判断出现错误

0

设备连接后即立即判断是否在线


public static function onConnect($client_id) {
$is_online = Gateway::isOnline($client_id);
file_put_contents("log11.txt", "tcp notice client_id=>" . $client_id."与服务器建立连接\r\n是否在线".$is_online."时间为".date('Y-m-d H:i:s',time())."\r\n", FILE_APPEND);
}```
当onMessage中不发送请求时   均判断正常
![图片](//wenda.workerman.net/uploads/questions/20181220/990d220515c93d8413c12e64cad88000.jpg)
当onMessage中打开post请求代码 则出现刚刚 登录设备即不在线情况,   在onClosez中记录日志发现设备并未离线
```php
/**
* 当客户端发来消息时触发
* @param int $client_id 连接id
* @param mixed $message 具体消息
*/
public static function onMessage($client_id, $message) {
$message = bin2hex($message);
$match = str_split($message,2);
$message = implode(' ', $match);
$uid = str_replace('.', "_",$_SERVER).'_'.$_SERVER;
$order_info = array(
'ip'=>$uid,
'data'=>$message,
);
// $result =
self::http_post('xxx.xxx.cn/WXAPI/Workerman/Charge_api',$order_info);
}

/**
* 模拟post进行url请求
* @param string $url
* @param array $post_data
*/
public static function http_post($url = '', $post_data = array()) {
if (empty($url) || empty($post_data)) {
return false;
}

$o = "";
foreach ( $post_data as $k => $v )
{
$o.= "$k=" . urlencode( $v ). "&" ;
}
$post_data = substr($o,0,-1);

$postUrl = $url;
$curlPost = $post_data;
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($ch);//运行curl
curl_close($ch);

return $data;
}

图片

1545319265(1).jpg 1545319548(1).jpg
已邀请:

wolegequ1993 - 90it男

赞同来自:

运行一会后则判断所有进入的连接都为不在线

blogdaren - 专注C编程、PHP内核、LINUX、VIM【http://www.phpcreeper.com】

赞同来自:

代码看上去似乎没有问题,建议你抓包看下是谁主动关闭了连接。

walkor

赞同来自:

linux服务器?阿里云?是否有加负载均衡?
onClose里记录日志到 log11.txt,有问题后再截图log11.txt内容。

wolegequ1993 - 90it男

赞同来自:

图片
 

要回复问题请先登录注册