workerman怎么判断连接状态

1. 运行环境

windows 10,php 7.3,workerman 4.1,laravel 8

2. 问题描述?

需要做一个实时更新的报价盘,前端用websockt连接服务器,连接成功后每秒给前端发送最新的数据,但是服务器是windows,在laravel中用workerman的Timer类报错pcntl_alarm()未被定义,然后考虑用while sleep循环,但是在postman测试时发现连接断开,循环还在不停推送,不知道怎么实时检测连接是否断开,然后停掉循环,是哪里用法不对嘛,新手菜鸡,希望大佬指点一下。

Command

<?php
namespace App\Console\Commands;
use GuzzleHttp\Client;
use Illuminate\Console\Command;
use Workerman\Connection\TcpConnection;
use Workerman\Worker;

class websocket extends Command
{
    protected $signature = 'websocket';
    protected $description = 'websocket';
    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        $ws_worker = new Worker("websocket://0.0.0.0:8080");
        $ws_worker->name = 'WebsocketWorker';
        $ws_worker->onMessage = function(TcpConnection $connection, $data){
            while (true) {
               if ($connection->getStatus()!==TcpConnection::STATUS_ESTABLISHED){
                    break;
                }
                $data = $this->GetGoldPrictOne();
                if ($data) {
                    $connection->send(json_encode($data));
                }
                sleep(1);
            }
        };
        $ws_worker->onConnect = function(TcpConnection $connection) {
            $connection->send('Welcome to the WebSocket server!');
        };
        $ws_worker->onClose = function(TcpConnection $connection) {
            echo "Connection closed\n";
        };
        Worker::runAll();
        $this->info('WebSocket server started successfully.');
    }
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 5

windows 不支持 pcntl,wokerman 推荐用 linux

4个月前 评论

windows装个docker给服务扔容器里面.

3个月前 评论
梦想星辰大海

我能想到的是,用我这个包或者采用轮询方案,window限制了。
用go写gateway(安装即可),用php快速实现websocket业务
gateway是现成的,只需实现php业务。

3个月前 评论

直接两个端一直互发消息不就已经达到需求了?

3个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!