Thinkphp5+FastAdmin配置workerman消息推送(多线程)
环境:linux系统、fastadmin(tp5内核)、php7.4.3,workerman1.0
1.首先删除vordor文件夹
2.安装扩展,下载workerman
-
//安装扩展
-
yum install php-process
-
//下载workerman
-
composer require topthink/think-worker
3.在application创建server.php
代码:
-
-
define('APP_PATH', __DIR__ . '/../application/');
-
//定义监听控制器
-
define('BIND_MODULE','push/Workerman');
-
-
-
-
// 加载框架引导文件
-
-
require __DIR__ . '/../thinkphp/start.php';
4.在application目录创建push目录
application/push/controller/Worker.php
注:如果想监听多个端口,只需要在application/push/controller中再创建一个文件,把端口改一下即可,另外在application创建再创建一个server.php
代码:
-
-
namespace app\push\controller;
-
use think\worker\Server;
-
use Workerman\Lib\Timer;
-
use think\Db;
-
-
class Worker extends Server{
-
protected $socket = 'http://0.0.0.0:2348'; //linux服务器端口
-
protected static $heartbeat_time=55;
-
-
/**
-
* 收到信息
-
* @param $connection
-
* @param $data
-
*/
-
public function onMessage($connection, $data)
-
{
-
if($data=="ping"&&$data==0){
-
}else{
-
//接收的参数
-
}
-
$connection->send("ping");
-
$connection->lastMessageTime=time();
-
}
-
-
-
/**
-
* 每个进程启动
-
* @param $worker
-
*/
-
public function onWorkerStart($worker){
-
//查看是否有新的充值或提现订单,有就推送给所有用户
-
Timer::add(3, function()use($worker){
-
-
$time_now=time();
-
$hasNewDepositOrder = Db::name('worker')->where('is_push',0)->order('id desc')->count('id');
-
// $system_listener = Db::name('worker')->cache(true)->order('id desc')->select();
-
-
if($hasNewDepositOrder){
-
$depositOrderInfo = Db::name('worker')->where('is_push',0)->order('id desc')->find();
-
$data = ['creatTime'=>date('Y-m-d H:i:s'),'name'=>$depositOrderInfo['name'],'tel'=>$depositOrderInfo['tel']];
-
foreach($worker->connections as $connection) {
-
if(empty($connection->lastMessageTime)){
-
$connection->lastMessageTime = $time_now;
-
}
-
-
if($time_now-$connection->lastMessageTime > self::$heartbeat_time){
-
-
$connection->close();
-
}
-
-
$connection->send(json_encode($data));
-
}
-
-
Db::name('worker')->where('id',$depositOrderInfo['id'])->update(['is_push'=>1]);
-
}else{
-
foreach($worker->connections as $connection) {
-
if(empty($connection->lastMessageTime)){
-
$connection->lastMessageTime = $time_now;
-
continue;
-
}
-
-
if($time_now-$connection->lastMessageTime > self::$heartbeat_time){ //连接超时
-
-
$connection->close();
-
}
-
}
-
}
-
});
-
-
-
}
-
-
}
5.找到/vendor/topthink/think-worker/src里面的Server.php
6.使用命令进入到application目录中,执行命令:php server.php start
注:如果想要监听多个端口:需要找到$this->worker = new Worker();
改成$this->worker = new Worker($this->socket);
整体代码如下:
-
-
// ----------------------------------------------------------------------
-
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
-
// ----------------------------------------------------------------------
-
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
-
// ----------------------------------------------------------------------
-
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
-
// ----------------------------------------------------------------------
-
// | Author: liu21st <liu21st@gmail.com>
-
// ----------------------------------------------------------------------
-
-
namespace think\worker;
-
-
use Workerman\Worker;
-
-
/**
-
* Worker控制器扩展类
-
*/
-
abstract class Server
-
{
-
protected $worker;
-
protected $socket = '';
-
protected $protocol = 'http';
-
protected $host = '0.0.0.0';
-
protected $port = '2346';
-
protected $processes = 4;
-
-
/**
-
* 架构函数
-
* @access public
-
*/
-
public function __construct()
-
{
-
// 实例化 Websocket 服务
-
-
$this->worker = new Worker($this->socket);//this->socket
-
// 设置进程数
-
$this->worker->count = $this->processes;
-
// 初始化
-
$this->init();
-
-
// 设置回调
-
foreach (['onWorkerStart', 'onConnect', 'onMessage', 'onClose', 'onError', 'onBufferFull', 'onBufferDrain', 'onWorkerStop', 'onWorkerReload'] as $event) {
-
if (method_exists($this, $event)) {
-
$this->worker->$event = [$this, $event];
-
}
-
}
-
// Run worker
-
Worker::runAll();
-
}
-
-
protected function init()
-
{
-
}
-
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfeihc
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01