PHP笔记-Workerman整合到Laravel中并创建websocket

Posted IT1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP笔记-Workerman整合到Laravel中并创建websocket相关的知识,希望对你有一定的参考价值。

今天想把websocket搭建起来,查了下原始的Laravel并没有这个功能,发现php中websocket用workerman好像比较多。

在此将他们结合下,但结合时发现了一些问题。此篇博文虽然以及结合起来了,但是在某些情况下,建议还是分开,做成微服务的那种。

如果是使用虚拟机或服务器。业务简单的情况下可以结合起来,不影响。还可以共享很多资源。

如果使用的虚拟空间。就必须要分开了。因为虚拟空间只开了80或443端口,websocket需要另外开个端口,所以这种情况要分开。

如果是要搞中大型的项目,建议分开。

下面来看下整合,先加载库

composer require workerman/workerman

创建控制台命令:

php artisan make:command Workerman

此时会在app/Console/Commands下面新建一个Workerman.php

将代码改成:

<?php

namespace App\\Console\\Commands;

use Illuminate\\Console\\Command;
use Workerman\\Worker;

class Workerman extends Command

    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'workerman:websocket';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    
        parent::__construct();
    

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    
        $wsWorker = new Worker('websocket://0.0.0.0:2346');

        $wsWorker->onConnect = function($connection)

            echo "New Connection\\n";
        ;

        $wsWorker->onMessage = function ($connection, $data)

            $connection->send('Hello' . $data);
        ;

        $wsWorker->onClose = function ($connection)

            echo "Connection closed\\n";
        ;

        Worker::runAll();
    

这里有几点要注意:

 这个$signature要填写,控制台启动workerman时就是

php artisan workerman:websocket

输入后:

 启动成功,用网页调试下:

服务端后台打印:

以上是关于PHP笔记-Workerman整合到Laravel中并创建websocket的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp3.2整合workerman 多入口模式(windows)

F2 workerman 整合入项目

安装composer,tp5.0和Workerman整合实现websocket通信demo

swoole和workerman哪个更易开发

TP5整合 WorkerMan 以及 GatewayWorker

workerman定时器使用 php定时任务