这里写自定义目录标题
- windows版
- 安装workerman
- 在windows注册服务
windows版
在安装之前先确定下workerman的使用场景,是用在windows平台还是Linux平台,再跟进文档进行配置
因为跟进thinkphp5.0文档进行配置的时候不是很全,自己还摸索了下,记录下这个过程
Workerman是一款纯PHP开发的开源高性能的PHP socket 服务器框架。被广泛的用于手机app、手游服务端、网络游戏服务器、聊天室服务器、硬件通讯服务器、智能家居、车联网、物联网等领域的开发。 支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。基于workerman开发者可以更专注于业务逻辑开发,不必再为PHP Socket底层开发而烦恼。
安装workerman
跟进tp官方文档:
- 首先通过 composer 安装;这里需要根据tp版本号和workerman版本号来安装,官方文档有点不清楚;我的是fastadmin,用的是tp5.0.24版本,只能安装1.0版本扩展
composer require topthink/think-worker=1.0.*
- 需要在window下做服务端,还需要安装,我安装的时候是 3.5.1 ;貌似从3.5.3开始是不分Linux和windows了;但是如果要用tp官方扩展的话需要tp6.0才支持
composer require workerman/workerman-for-win
- 新增启动服务文件server.php,在项目根目录;
<?php
define('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE','push/Worker');
// 加载框架引导文件
require __DIR__ . '/thinkphp/start.php';
- 在push/controller模块新增服务处理类,products.cn是我本地测试域名,最后面有个index方法主要就是官方文档的命令无法执行,需要加start,为了方便我自己增加的
<?php
namespace app\push\controller;
use think\worker\Server;
class Worker extends Server
{
protected $socket = 'websocket://products.cn:2346';
public function onMessage($connection, $data)
{
$data = json_decode($data,true);
if ($data['sign']){
$connection->send($data['sign']);
}else{
$connection->send("我收到链接信息了");
}
}
public function onConnect($connection)
{
}
public function onClose($connection)
{
}
public function onError($connection, $code, $msg)
{
echo "error $code $msg\n";
}
public function onWorkerStart($worker)
{
}
public function index(){
parent::start();
}
}
- 在项目根目录下打开命令行下运行,启动监听服务;
php server.php
上面这个命令是我有增加index方法去调用父类的start方法
如果按官方的例子则需要用如下命令
php server.php start
- 运行成功会出现如下状态;
- 在html文件中增加如下js代码;
<script type="application/javascript">
ws = new WebSocket("ws://products.cn:2346");
ws.onopen = function() {
alert("连接成功");
ws.send('tom');
alert("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
alert("收到服务端的消息:" + e.data);
};
$(".signScore").click(function () {
var sign = '{"sign":"签到"}';
ws.send(sign);
})
</script>
- 当我点击按钮发送一个签到json串过去的时候,我服务接收并返回了我发送的消息,因为我处理了再返回的。
到此tp5.0和workman的对接就完成了简单的通讯,至于需要开发聊天或者其他的取代浏览器轮询操作的需要再封装完善下代码;
在windows注册服务
因为在Windows端如果长期运行的话不太可能单独开一个cmd,这样每次都要用cmd启动,比较麻烦,我们可以使用Windows的服务来完成
- 在D盘新建一个server.txt,然后后缀名改成.bat,接着用notepad++编辑批处理脚本
@echo off
d:
cd D:\code\products
php server.php
- 一定要用管理员 权限启动cmd 输入一下内容创建服务;
sc create workerman2346 binPath=D:/server.bat description="PHPsocket服务" start=auto
-
我自己开始不太清楚命令,是分两步走的:
-
然后查看windows服务列表:
如果需要不弹出cmd窗口的话 在bat脚本后面加上
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
:begin
也可以将脚本添加到Windows计划任务上来执行
OK,终于记录下了这次的测试,虽然可能很简单,但是自己还是弄了一个下午,也希望能帮助一些人使用。