1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- <?php
- namespace Mall\Framework\Swoole;
- class Client{
- private $client;
- private $clients = [];
- private $waitList = [];
- public function __construct($options){
- class_exists('Swoole_Client') or die("Swoole_Client: check swoole extension");
- $buildSwooleConfig = [
- 'open_length_check' => true, // 开启协议解析
- 'package_length_type' => 'N', // 长度字段的类型
- 'package_length_offset' => 0, //第几个字节是包长度的值
- 'package_body_offset' => PACKAGE_BODY_OFFSET, //第几个字节开始计算包内容
- 'package_max_length' => PACKAGE_MAXLENG, //协议最大长度
- ];
- $type = SWOOLE_SOCK_TCP;
- if($options['ssl'] == true){
- $type |= SWOOLE_SSL;
- $sslConfig = [
- 'ssl_cert_file' => $options['ssl_cert_file'],
- 'ssl_key_file' => $options['ssl_key_file'],
- ];
- $buildSwooleConfig = array_merge($buildSwooleConfig, $sslConfig);
- }
- $this->client = new \Swoole_Client($type);
- $this->client->set($buildSwooleConfig);
- if(!$this->client->connect($options['host'], $options['port'], isset($options['time_out'])?$options['time_out']:5)){
- throw new \Exception("connect failed. Error:".$this->client->errCode.PHP_EOL);
- }
- }
- /**
- * 发送Swoole 数据
- */
- public function sendMsg($msg)
- {
- //发送给消息到服务端
- //$this->client->send( $this->formatMsg($msg) );
- $this->client->send( "hello world\n" );
- //接受服务端发来的信息
- $message = $this->client->recv();
- $message = json_decode(substr($message, 12),true);
- //关闭客户端
- $this->client->close();
- return $message;
- }
- public function formatMsg($msg)
- {
- return json_encode($msg, JSON_UNESCAPED_UNICODE).PACKAGE_EOF;
- }
- }
|