第三方系统调用text协议通信超时

追梦随想
// 建立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;

如上代码,如果去掉判断直接发送给客户端就正常,如果加了判断那就不行,一会儿就超时了,请问这是什么情况?

2818 1 0
1个回答

latin

这个很好理解吧,
// 读取推送结果
$res = fread($client, 8192);客户端这边在等待服务端返回结果,然后服务端走到
if (empty($user_id)) return self::format_return_message('error', '缺少参数');的时候,并没有给这个fread的客户端推送结果,那fread就一直等待了,就超时了。
 
 
 

  • 追梦随想 2018-10-17

    这么说的话第三方调用的话,也必须发消息给客户端了?如果我只需要更改部分数据而不需要发消息给客户端的话,那该如何解决?请教下

  • latin 2018-10-17

    给fread的那个客户端发送消息就行了

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