首先通过 composer 安装
composer require topthink/think-workerwindows 服务器需要下载的
composer require workerman/workerman-for-win安装成功后config 目录下,会多出几个文件
打开worker_server.php 我们看到他默认的监听端口是2345,下面虽然也提供了一些回调方法,但是毕竟是在配置文件中,我们也不太好扩展,所以我们这时需要自定义workerman服务类
步骤如下:
新建一个应用,比如命名为http,然后新建一个php 类 Worker.php
<?php
namespace app\http;
use think\worker\Server;
class Worker extends Server
{
protected $socket = 'websocket://localhost:2345';
public function onMessage($connection, $data)
{
$connection->send("已经收到");
}
/**
* 当连接建立时触发的回调函数
* @param $connection
*/
public function onConnect($connection)
{
$connection->send("连接成功");
}
/**
* 当连接断开时触发的回调函数
* @param $connection
*/
public function onClose($connection)
{
}
/**
* 当客户端的连接上发生错误时触发
* @param $connection
* @param $code
* @param $msg
*/
public function onError($connection, $code, $msg)
{
echo "error $code $msg\n";
}
/**
* 每个进程启动
* @param $worker
*/
public function onWorkerStart($worker)
{
}
}然后在回到刚才的配置文件worker_server.php,修改worker_class 为你刚才创建的类,定义该参数后,其它配置参数均不再有效。
在worker_server.php中增加配置参数:
return [
'worker_class' => 'app\http\Worker',
];使用Workerman作为HttpServer,启动服务端,至此我们的服务端已经搭建完成了
php think worker:server我们可以新建一个html ,查看一下是否可以正常使用
<html>
<head>
<meta charset="utf-8" />
<title>网页版群聊</title>
</head>
<body>
<script>
ws = new WebSocket("ws://localhost:2345");
ws.onopen = function() {
console.info("webSocket通道建立成功!!!");
ws.send('hello');
console.log("给服务端发送一个字符串:hello");
};
ws.onmessage = function(even) {
console.log("收到服务端的消息:" + even.data);
};
</script>
</body>
</html>Thinkphp6.x 如何配置使用 Workerman
WebSocket 在线测试
在 ThinkPHP6 中使用 Workerman
thinkphp6整合workerman教程
thinkPHP6+workerman即时通讯小demo
Composer 中文网
Deprecated: Directive ‘track_errors‘ is deprecated in Unknown on line 0
修改 php.ini track_errors=On 为 track_errors=Off 即可
The Windows OneDrive folder is not supported on PHP versions below 7.2.23 an
windows下安装composer
Could not find package topthink/think-worker. It was however found via repos
Composer更改为阿里的源
解除镜象
解决PHP Warning: Module 'mysqli' already loaded in Unknown on line 0
原因:是PHP有两种方式添加扩展模块,一种是直接编译进了PHP,另外一种是通过共享模式添加模块,并在php.ini配置文件中配置相应的模块。以上问题出现的原因是我们需要的模块已经编译进PHP了,但是我们有通过共享模块再次加重了改模块,这样就导致重复加重。
在php.ini中找到下面并注释
使用php -m还是可以看到mysqli扩展的,并且不会再报刚才的错误
小程序websocket(心跳连接)
websocket连接之后,如果隔一段时间不聊天,运营商会认为你空占网络资源,强行关闭你的websocket连接,
如果想要一直保持连接,就需要监听websocket关闭事件,等关闭时重新连接从而让websocket一直保持连接.
这个过程称为心跳
1、必须要有心跳,如果没有会自动断开连接。
2‘、断开后必须取消setTimeout,不然会继续执行一次。
3、发送消息只有在onSocketOpen后才会发送,所以添加一个消息数组,等连接成功后再发送。
4、如果在还没连接成功时退出连接,会导致无法关闭,所以添加了socketClose来关闭socket
下面是使用方法
php 写入文件,日志记录信息方法
workerman ssl wss
创建wss服务
🤔🤔🤔