## confing/gateway_worker.php里修改
~~~
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// +----------------------------------------------------------------------
// | Workerman設置 僅對 php think worker:gateway 指令有效
// +----------------------------------------------------------------------
return [
// 擴展自身需要的配置
'protocol' => 'websocket', // 協議 支持 tcp udp unix http websocket text
'host' => '0.0.0.0', // 監聽地址
'port' => 8881, // 監聽端口
'socket' => '', // 完整監聽地址
'context' => [], // socket 上下文選項
'register_deploy' => true, // 是否需要部署register
'businessWorker_deploy' => true, // 是否需要部署businessWorker
'gateway_deploy' => true, // 是否需要部署gateway
// Register配置
'registerAddress' => '127.0.0.1:1236',
// Gateway配置
'name' => 'thinkphp',
'count' => 1,
'lanIp' => '127.0.0.1',
'startPort' => 2000,
'daemonize' => false,
'pingInterval' => 30,
'pingNotResponseLimit' => 0,
'pingData' => '{"type":"ping"}',
// BusinsessWorker配置
'businessWorker' => [
'name' => 'BusinessWorker',
'count' => 1,
'eventHandler' => '\app\gateway\Chat',
],
];
~~~
## Cache文件里
~~~
<?php
namespace app\gateway;
use GatewayWorker\Lib\Gateway;
use think\Cache;
class Chat
{
//接收消息時候觸發的方法
public static function onMessage($client_id, $data){
$data=json_decode($data,true);
if($data['type']=='chatMessage'){
// $redis = Cache::store('redis')->handler();
$info['username'] = $data['data']['mine']['username'];
$info['avatar'] = $data['data']['mine']['avatar'];
$info['id'] = $data['data']['mine']['id'];
$info['type'] = $data['data']['to']['type'];
$info['content'] = $data['data']['mine']['content'];
$info['mine'] = false;
$info['fromid'] = $data['data']['mine']['id'];
$info['timestamp'] = time()*1000;
Gateway::sendToUid($data['data']['to']['id'],json_encode($info)); //向對方ID發消息 ,數據根據layim格式返回
}
}
//當可以連接時候傳過來的數據
public static function onWebSocketConnect( $client_id, $data){
$token=$data['get']['token']; //自己的賬號ID
$key=config('chat.key');
$id=decrypt($token,$key); //解密好的ID
Gateway::bindUid($client_id,$id);//機器ID與用戶ID綁定
}
}
~~~
- WebSocket協議
- 構造函數(6種協議)
- count(進程設置)
- name(鏈接名稱)
- $daemonize(守護進程設置)
- logFile(日志路徑)
- stdoutFile(守護進程記錄文件)
- connections(獲取鏈接數組的)
- worker的回調屬性
- worker類的方法
- Connection類的方法
- getRemotePort獲取端口方法
- getRemoteIp獲取IP地址
- close 安全關閉連接
- 定時器
- Channel分布式通信組件
- 心跳檢測程序
- liunx優化配置
- thinkphp5.1使用worerman
- thinkphp5.1中用Channel實現廣播通信
- thinkphp5.1中使用定時器
- thinkphp5.1使用TcpConnection類
- Gateway類使用
- BusinessWorker使用
- Register類的使用
- Events類使用(業務邏輯層)
- Lib\Gateway 接口(經常用)
- webman中間件stomp
- Gateway在thinkphp5.1里使用