当前位置: 首页 > news >正文

php larval workerman,laravel-workerman简易聊天室

ENV

php-7.2 | Laravel-5.5 | workerman-3.5

安装workerman

在安装好laravel的目录中执行命令composer require workerman/workerman

laravel创建命令控制器

php artisan make:command Workerman

laravel与workerman整合

上面命令会创建文件app\Console\Commands\Workerman.php 将下面代码复制并替换掉原来代码.

namespace App\Console\Commands;

use Illuminate\Console\Command;

use Workerman\Worker;

use Workerman\Autoloader;

class Workerman extends Command

{

/**

* The name and signature of the console command.

*

* @var string

*/

protected $signature = 'Workerman {action}';

/**

* The console command description.

*

* @var string

*/

protected $description = 'Command description';

/**

* Create a new command instance.

*

* @return void

*/

public function __construct()

{

parent::__construct();

}

public function handle()

{

global $argv;

$arg = $this->argument('action');

$argv [1] = $arg;

global $text_worker;

// 创建一个Worker监听9130端口,使用http协议通讯

$text_worker = new Worker("websocket://0.0.0.0:8080");

/* $http_worker->transport = 'http';*/

// 启动4个进程对外提供服务

$text_worker->count = 4;

$handler = \App::make('Handler\WorkermanHandler');

$text_worker->onConnect = array($handler,"handle_connection");

$text_worker->onMessage = array($handler,"handle_message");

$text_worker->onClose = array($handler,"handle_close");

// 运行worker

Worker::runAll();

}

}

手动创建文件app\Handler\WorkermanHandler.php 将下面代码复制替换

namespace Handler;

use Illuminate\Console\Command;

use Workerman\Worker;

class WorkermanHandler

{

protected $global_uid = 0;

//当客户端连上来时分配uid,并保存链接,并通知所有客户端

public function handle_connection($connection){

global $text_worker, $global_uid;

//为这个链接分配一个uid

$connection->uid = ++$global_uid;

foreach($text_worker->connections as $conn){

$conn->send("user:[{$connection->uid}] online");

}

}

//当客户端发送消息过来时,转发给所有人

public function handle_message($connection,$data){

global $text_worker;

foreach($text_worker->connections as $conn){

$conn->send("user:[{$connection->uid}] said:$data");

}

}

//当客户端断开时,广播给所有客户端

public function handle_close($connection){

global $text_worker;

foreach($text_worker->connections as $conn){

$conn->send("user:[{$connection->uid}] logout");

}

}

}

打开composer.json文件增加一段"app/Handler"于classmap中下面是我的部分内容

...

"autoload": {

"classmap": [

"database/seeds",

"database/factories",

"app/Handler"

],

"psr-4": {

"App\\": "app/"

}

},

...

执行命令: composer dump-autoload

H5 websokcet代码-(参考资料中的资料4)

启动服务

php artisan Workerman start

tip

app\Console\Commands\Workerman.php 里的代码 $arg = $this->argument('action'); $argv [1] = $arg; 如果这段代码不写那么就无法启动服务会报Usage: php yourfile.php {start|stop|restart|reload|status|connections} [-d]

原因: 参考接收位置错误. 代码位置: \vendor\workerman\workerman\Worker.php 673 684, 问题位置 673行中, $argv 这个全局变量取的key的位置错乱的.

参考资料

相关文章:

  • matlab辨识函数ar多通道,AR模型之纠结与predict函数
  • matlab 正弦曲线平均值,正弦函数和余弦函数的平均值求解
  • php 打印soap日志,在PHP中记录所有Soap请求和响应
  • oracle调用sqlplus,oracle 安装与SQLPLUS简单用法
  • oracle bi免费不,Oracle BI管理工具.doc
  • oracle查看expdp进度,impdp、expdp监控数据备份恢复完成进度(EXPDP/IMPDP/RMAN)
  • matlab x的几次方怎么表示,PPTx的几次方如何输入?
  • 群辉linux系统,[教程] 群晖VMM虚拟机安装Linux系统无法成功启动桌面的解决办法...
  • linux系统卡死鼠标不动,linux桌面环境鼠标假死.点不动
  • Linux中free函数头文件,FreeImage图形库如何在Linux下的使用
  • linux r如何运行软件,linux上R的使用
  • hnc8进linux环境,鸟哥的linux私房菜(基础篇,8、开机关机、在线)命令
  • 润乾连接linux数据库,Linux下使用润乾设计器
  • linux c语言拷贝u盘,用C语言编写linux cp 拷贝命令
  • linux是开发环境,Linux开发环境
  • Docker: 容器互访的三种方式
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • leetcode-27. Remove Element
  • mysql外键的使用
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Object.assign方法不能实现深复制
  • oschina
  • Promise面试题2实现异步串行执行
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 分布式熔断降级平台aegis
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 让你的分享飞起来——极光推出社会化分享组件
  • 如何利用MongoDB打造TOP榜小程序
  • MPAndroidChart 教程:Y轴 YAxis
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #162 (Div. 2)
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • $NOIp2018$劝退记
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (二)windows配置JDK环境
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)IOS中获取各种文件的目录路径的方法
  • .describe() python_Python-Win32com-Excel
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net FrameWork简介,数组,枚举
  • .NET Project Open Day(2011.11.13)
  • .net 流——流的类型体系简单介绍
  • .Net(C#)自定义WinForm控件之小结篇
  • .net的socket示例
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • :如何用SQL脚本保存存储过程返回的结果集
  • @Conditional注解详解
  • @property python知乎_Python3基础之:property
  • @property括号内属性讲解