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

<?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

<?php
namespace app\push\controller; 
use think\worker\Server; 
use Workerman\Lib\Timer;
use think\Db;
 
class Worker extends Server{
   
       
    protected $socket = 'websocket://127.0.0.1:2346'; //linux服务器端口
    protected static $heartbeat_time=55;
    
      /**
     * 收到信息
     * @param $connection
     * @param $data
     */
    public function onMessage($connection, $data)
    {
   
   
        if($data=="ping"&&$data==0){
   
   
            $connection->send("pong");
            $connection->lastMessageTime=time();
        }else{
   
   

//            $ordercount = Db::name('ddrive_order')->where('status', '0')->whereTime('appointment_time','>',time())->count();
//            $orderpccount = Db::name('ddrive_pc_order')->where('status', '0')->count();
//
//            $ddnumber = bcadd($ordercount,$orderpccount);
//
//            $connection->lastMessageTime=time();
//            $connection->send($ddnumber);

        }
    }
    
   
    /**
     * 每个进程启动
     * @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){
   
   

相关推荐

  1. Thinkphp5+FastAdmin配置workerman消息(线)

    2023-12-09 11:32:03       57 阅读
  2. HTML5+ push消息

    2023-12-09 11:32:03       19 阅读
  3. Thinkphp+workman+redis实现线异步任务处理

    2023-12-09 11:32:03       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-09 11:32:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-09 11:32:03       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-09 11:32:03       87 阅读
  4. Python语言-面向对象

    2023-12-09 11:32:03       96 阅读

热门阅读

  1. 【Linux 软连接命令】

    2023-12-09 11:32:03       49 阅读
  2. GO设计模式——15、责任链模式(行为型)

    2023-12-09 11:32:03       63 阅读
  3. Android 获取进程名称

    2023-12-09 11:32:03       63 阅读
  4. 前端学习--React(5)

    2023-12-09 11:32:03       52 阅读
  5. React查询、搜索类功能的实现

    2023-12-09 11:32:03       60 阅读
  6. ReactJs笔记摘录

    2023-12-09 11:32:03       71 阅读
  7. K8S学习指南(2)-docker的基本使用

    2023-12-09 11:32:03       52 阅读
  8. Solidity学习教程

    2023-12-09 11:32:03       49 阅读
  9. BGP综合

    BGP综合

    2023-12-09 11:32:03      51 阅读
  10. C语言精选——选择题Day40

    2023-12-09 11:32:03       59 阅读
  11. 【力扣100】9.和为k的子数组

    2023-12-09 11:32:03       71 阅读
  12. vue基本运用之常见问题及案例代码

    2023-12-09 11:32:03       53 阅读
  13. error: overloaded function with no contextual type information

    2023-12-09 11:32:03       50 阅读
  14. 爬虫解析-BeautifulSoup-bs4(七)

    2023-12-09 11:32:03       55 阅读
  15. vue+vite+diff.js使用方法

    2023-12-09 11:32:03       51 阅读