一. 基礎(chǔ)
1. workerman
workerman是國人開發(fā)的良心高性能的PHP socket 服務(wù)器框架,在全球最大同性交友平臺(tái)gayHub的star都4K多,可以想象是多么的牛X。
可以單獨(dú)部署,也可以整合進(jìn)MVC的框架(TP,laravel等),可以說非常實(shí)用,并發(fā)效果也好。
官網(wǎng)地址:
gayhub地址:
2. gateway-worker
gateway-worker(后面直接稱gateway)是基于 workerman開發(fā)的TCP長(zhǎng)連接框架,用于快速開發(fā)TCP長(zhǎng)連接應(yīng)用。
在線聊天一般都是實(shí)用長(zhǎng)連接保持通信,使用 workerman雖然能夠做到同樣的效果,但是gateway更加的方便快捷。
(輪詢構(gòu)建的聊天室已經(jīng)OUT了,實(shí)在是太...)
gayhub地址:
3. gatewayClient
gateClient是用來輔助 workerman或者是gateway進(jìn)行用戶分組以及向用戶發(fā)送信息的組件,同時(shí),能夠快速便捷的將原有系統(tǒng)的uid和clientid綁定起來。
gayhub地址:
二. 安裝類庫
1. workerman
- linux
composer require topthink/think-worker
- WINDOWS
composer require workerman/workerman-for-win
如果用的是TP5.0.X 安裝的時(shí)候可能不成功,因?yàn)閏omposer默認(rèn)安裝的最新版,也就是workerm的2.0.X版,所以需要
composer require topthink/think-worker v1.0.1
加上對(duì)應(yīng)的版本號(hào)
2. gateway-worker
- linux
composer require gateway-worker
- WINDOWS
composer require gateway-worker-for-win
3. gatewayClient
composer require workerman/gatewayclient
三. 集成
- workerman
主要做信息推送
TP5相關(guān)文檔:https://www.kancloud.cn/manual/thinkphp5/235128
具體操作
- 在項(xiàng)目根目錄新建server.php文件,文件內(nèi)容為:
<?php
define('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE','push/Worker');
// 加載框架引導(dǎo)文件
require __DIR__ . '/thinkphp/start.php';
2.在項(xiàng)目下的application里新建push文件夾
3.在新建的push文件夾下面新建controller文件夾,目錄結(jié)構(gòu)為\application\push\controller
4.在剛才的controller文件夾下面新建Worker.php文件,內(nèi)容為:
<?php
namespace app\push\controller;
use think\worker\Server;
class Worker extends Server
{
protected $socket = 'websocket://0.0.0.0:2346';
/**
* 收到信息
* @param $connection
* @param $data
*/
public function onMessage($connection, $data)
{
$connection->send('我收到你的信息了');
}
/**
* 當(dāng)連接建立時(shí)觸發(fā)的回調(diào)函數(shù)
* @param $connection
*/
public function onConnect($connection)
{
$connection->send('正在連接');
}
/**
* 當(dāng)連接斷開時(shí)觸發(fā)的回調(diào)函數(shù)
* @param $connection
*/
public function onClose($connection)
{
$connection->send('連接關(guān)閉');
$connection->close();
}
/**
* 當(dāng)客戶端的連接上發(fā)生錯(cuò)誤時(shí)觸發(fā)
* @param $connection
* @param $code
* @param $msg
*/
public function onError($connection, $code, $msg)
{
echo "error $code $msg\n";
}
/**
* 每個(gè)進(jìn)程啟動(dòng)
* @param $worker
*/
public function onWorkerStart($worker)
{
}
}
5.上面都弄好后,就可以到項(xiàng)目目錄里,啟動(dòng)監(jiān)聽服務(wù)
php server.php
6.運(yùn)行成功后會(huì)出現(xiàn)類型于下圖,如果報(bào)錯(cuò)可能是防火墻或端口沒開放等,具體問題具體分析

7.客戶端可以連接方式
ws = new WebSocket("ws://127.0.0.1:2346");
ws.onopen = function() {
alert("連接成功");
ws.send('tom');
alert("給服務(wù)端發(fā)送一個(gè)字符串:tom");
};
ws.onmessage = function(e) {
alert("收到服務(wù)端的消息:" + e.data);
};
- gateway-worker
主要做單聊,群聊和廣播
由于通過composer安裝時(shí)只下載了核心類,我們可以下載一些demo來進(jìn)行配置
- 去官網(wǎng)下載Windows版的gateway-worker,里面有demo。http://www.workerman.net/download
- 將下載的壓縮包解壓,將Applications/Yourapp中的文件全部復(fù)制到thinkphp5目錄application/push里面
- 將解壓后的文件夾中的start_for_win.bat復(fù)制到thinkphp5的根目錄,即與application同級(jí)的目錄
- 右鍵start_for_win.bat,點(diǎn)編輯,將里面的目錄改成自己的目錄,這里改為
php application\push\start_register.php application\push\start_gateway.php application\push\start_businessworker.php
Pause
- 保存退出。雙擊運(yùn)行。
- linux基本一至,但不用編輯start_for_win.bat文件,直接使用start.php文件
-
成功運(yùn)行后會(huì)出現(xiàn)如下圖
image
via:https://blog.csdn.net/qq_14913213/article/details/77184074
客戶端連接成功后可以通過TP的MVC模式進(jìn)行發(fā)送信息
<?php
namespace app\index\controller;
use \GatewayClient\Gateway;
class Index
{
public function send(){
//綁定端口
Gateway::$registerAddress = '127.0.0.1:1238';
// 監(jiān)查客戶端是否在線
Gateway::isOnline('7f0000010b5400000002')
// 給所有客戶端廣播信息
Gateway::sendToAll("test\r\n");
}
}
更多操作方法可以查看
