// 建立socket连接到内部推送端口
$client = stream_socket_client('tcp://192.168.31.214:1230', $errno, $errmsg);
var_dump($errno, $errmsg);
// 推送的数据,包含uid字段,表示是给这个uid推送
$data = array('action'=>'sendToAll', 'info'=>'哈哈哈哈哈哈哈');
// $data = array('action'=>'editUser', 'info'=>'哈哈哈哈哈哈哈');
// 发送数据,注意5678端口是Text协议的端口,Text协议需要在数据末尾加上换行符
fwrite($client, json_encode($data)."\n");
// 读取推送结果
$res = fread($client, 8192);
fclose($client); //群发消息
case 'sendToAll':
$user_id = isset($message) ? $message : 0;
if (empty($user_id)) return self::format_return_message('error', '缺少参数');
Gateway::sendToAll(self::format_return_message('message', $message));
break;
如上代码,如果去掉判断直接发送给客户端就正常,如果加了判断那就不行,一会儿就超时了,请问这是什么情况?
这个很好理解吧,
// 读取推送结果
$res = fread($client, 8192);客户端这边在等待服务端返回结果,然后服务端走到
if (empty($user_id)) return self::format_return_message('error', '缺少参数');的时候,并没有给这个fread的客户端推送结果,那fread就一直等待了,就超时了。
这么说的话第三方调用的话,也必须发消息给客户端了?如果我只需要更改部分数据而不需要发消息给客户端的话,那该如何解决?请教下
给fread的那个客户端发送消息就行了