公司网页交互需要用到websocket,找了一圈资料,最后和师兄讨论了一下,师兄推荐了gatewayworker,看了一下文档挺符合现在的即时通讯的需求,于是,啥也别说了,开干了,哈哈哈哈。
1.了解一个东西,先从demo开始,刚开始下的demo,在本地运行服务,我本地是Windows,双击 start_for_win.bat 文件运行(Linux下启动start.php,命令为:php start.php start),如果有报错,说明本地PHP没有添加环境变量,在本地添加环境变量后,再双击运行
1.1本地添加环境变量得方法:
找到PHP.exe的目录,复制目录地址,粘贴在环境变量的PATH后面,如下图 :
然后右击(win10)这台电脑 -> 属性,然后根据下图的步骤添加,最后确定即可
最后,打开cmd 输入php -v 看到版本,说明环境变量安装成功
1.2 成功后再双击 start_for_win.bat 文件,出现如下图,说明安装成功
1.3 成功后用telnet测试下
打开两个或两个以上的cmd窗口,输入telnet 127.0.0.1 8282 ( 就是本地的IP地址加上start_gateway中配置的的tcp的端口号), 两个窗口相互输入,相互都能看见,体验一下窗口命令聊天的乐趣,嘻嘻
2. 整合gatewayworker到 tp5 的项目中
刚开始觉得demo在本地跑起来了,就直接把demo复制到项目中了,但是没想到报找不到核心类文件的错误,最后找了找,发现必须得用composer下载,最后用composer下载了,双击,服务跑起来啦,哈哈哈哈
2.1 composer下载安装gatewayworker
(1)cd 进入项目目录,输入如下命令,回车,如果网速慢得等一会
composer require workerman/gateway-worker
下载完成后目录结构如下:
下载成功后,将demo中的YourApp中的文件复制到项目中的控制器中
复制过去后目录结构如下:
复制过来以后,修改启动文件中的目录名称,修改成自己项目中的(要在Windows中启动,也同样要修改启动文件的目录名称,换成自己目录中的名称)
(2)将文件上传至服务器上,Linux系统输入 php start.php start 命令启动服务,出现如下图,说明安装成功
欧克,服务启动你就可以对他进行任何操作了,尽情的发挥吧。
最后要说的一点就是刚开始启动的时候,一直不停的停止,不停的启动,没有启动成功,报的如下错误:
Fatal error: Uncaught Exception in /home/wwwroot/highway/vendor/workerman/workerman/Worker.php:2208
最后看了报错原因,发现是PHP的 stream_socket_server 函数被 php.ini 禁用了,去php.ini中找到 disable_functions 一项,将 stream_socket_server 禁用项删掉,重启 php-fpm,然后再启动start.php,好啦,万事大吉!
3.将start.php加入开机自启
3.1 编写开机自启启动文件workermanstart.sh(名称自己来定),上传服务器,将权限改为可执行(命令:chmod +x workermanstart.sh)文件内容如下:
#! /bin/sh
proc_name="WorkerMan" #进程名称
log_name="/home/wwwroot/highway/workerman.log" #日志名称
proc_num=`ps -ef | grep $proc_name | grep -v grep | wc -l` #进程数量
if [ $proc_num -eq 0 ]
then
/usr/local/php/bin/php /home/wwwroot/highway/start.php restart -d
echo `date +%Y-%m-%d` `date +%H:%M:%S` $proc_name >>$log_name
fi
3.2 编辑 /etc/rc.local 文件,命令如下:
在开机启动文件中加入:nohup /home/wwwroot/highway/workermanstart.sh >/dev/null 2>&1&
保存退出。
ps命令查看状态