第一步:cmd 到项目根目录运行
1 :composer require topthink/think-worker=1.0.* -vvv
windows下需要运行(tp5手册:https://www.kancloud.cn/manual/thinkphp5/235128)
2: composer require workerman/workerman-for-win
第二步
public 目录新建server .php文件
define(‘APP_PATH’, DIR . ‘/…/application/’);
define(‘BIND_MODULE’,‘push/Worker’);
// 加载框架引导文件
require DIR . ‘/…/thinkphp/start.php’
push/Worker文件内容
namespace app\danmu\controller;
use think\worker\Server;
class Worker extends Server
{
protected $socket = 'websocket://0.0.0.0:2345';
protected $processes = 1;
protected $worker;
public function __construct()
{
parent::__construct();
$this->worker->uidConnections = array();
}
/**
* 收到信息
* @param $connection
* @param $data
*/
public function onMessage($connection, $data)
{
$uid = $connection->uid;
if($uid){
$this->worker->uidConnections[$uid] = $connection;
$this->broadcast($data);
}
}
// 向所有验证的用户推送数据
function broadcast($message)
{
foreach($this->worker->uidConnections as $connection)
{
$connection->send($message);
}
}
// 针对uid推送数据
function sendMessageByUid($uid, $message)
{
if(isset($this->worker->uidConnections[$uid]))
{
$connection = $this->worker->uidConnections[$uid];
$connection->send($message);
}
}
/**
* 当连接建立时触发的回调函数
* @param $connection
*/
public function onConnect($connection)
{
$connection->onWebSocketConnect = function($connection , $http_header)
{
// 可以在这里判断连接来源是否合法,不合法就关掉连接
// $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket连接
// if($_SERVER['HTTP_ORIGIN'] != 'http://bw.aiqi-inc.com' || empty($_GET['token']))
// {
// $connection->close();
// }
// onWebSocketConnect 里面$_GET $_SERVER是可用的
// print_r($_SERVER['HTTP_ORIGIN']);
$connection->uid = $_GET['token'];
// var_dump($_GET, $_SERVER);
};
}
/**
* 当连接断开时触发的回调函数
* @param $connection
*/
public function onClose($connection)
{
}
/**
* 当客户端的连接上发生错误时触发
* @param $connection
* @param $code
* @param $msg
*/
public function onError($connection, $code, $msg)
{
echo "error $code $msg\n";
}
/**
* 每个进程启动
* @param $worker
*/
public function onWorkerStart($worker)
{
}
}
cmd 项目中到public目录下运行php server.php 打开监听
第三步 浏览器:
浏览器打开项目运行 console
ws = new WebSocket(“ws://127.0.0.1:3344”);
ws.onopen = function() {
alert(“连接成功”);
ws.send(‘tom’);
alert(“给服务端发送一个字符串:tom”);
};
ws.onmessage = function(e) {
alert(“收到服务端的消息:” + e.data);
};
ƒ (e) {
alert(“收到服务端的消息:” + e.data);
}