关键词搜索

源码搜索 ×
×

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

发布2023-02-20浏览1403次

详情内容

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

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

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

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

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

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

composer require workerman/workerman

创建控制台命令:

php artisan make:command Workerman

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

将代码改成:

  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use Workerman\Worker;
  5. class Workerman extends Command
  6. {
  7. /**
  8. * The name and signature of the console command.
  9. *
  10. * @var string
  11. */
  12. protected $signature = 'workerman:websocket';
  13. /**
  14. * The console command description.
  15. *
  16. * @var string
  17. */
  18. protected $description = 'Command description';
  19. /**
  20. * Create a new command instance.
  21. *
  22. * @return void
  23. */
  24. public function __construct()
  25. {
  26. parent::__construct();
  27. }
  28. /**
  29. * Execute the console command.
  30. *
  31. * @return int
  32. */
  33. public function handle()
  34. {
  35. $wsWorker = new Worker('websocket://0.0.0.0:2346');
  36. $wsWorker->onConnect = function($connection){
  37. echo "New Connection\n";
  38. };
  39. $wsWorker->onMessage = function ($connection, $data){
  40. $connection->send('Hello' . $data);
  41. };
  42. $wsWorker->onClose = function ($connection){
  43. echo "Connection closed\n";
  44. };
  45. Worker::runAll();
  46. }
  47. }

这里有几点要注意:

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

php artisan workerman:websocket

输入后:

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

服务端后台打印:

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载