地址:https://www.kancloud.cn/manual/thinkphp6_0/1147857
DOCTYPE html>
<html>
<head>
<title>HTML5title>
<meta charset="utf-8" />
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js">script>
<script>
$(function() {
var socket;
var readyState = ["connecting", "connected", "closing", "closed"];
/* 打开连接事件 */
$("button:eq(0)").click(function() {
try {
/* 连接 */
socket = new WebSocket("ws://外网地址:2345");
/* 绑定事件 */
socket.onopen = function() {
$("#msg").html("连接成功...");
};
socket.onmessage = function(e) {
$("#msg").html($("#msg").html() + "
" + e.data);
};
socket.onclose = function() {
$("#msg").html($("#msg").html() + "
关闭连接...");
};
} catch(exception) {
$("#msg").html($("#msg").html() + "
有错误发生");
}
});
/* 发送数据事件 */
$("button:eq(1)").click(function() {
/* 检查文本框是否为空 */
if($("#data").val() == "") {
alert("请输入数据!");
return;
}
try {
socket.send($("#data").val());
$("#msg").html($("#msg").html() + "
发送数据:" + $("#data").val());
} catch (exception) {
$("#msg").html($("#msg").html() + "
发送数据出错");
}
/* 清空文本框 */
$("#data").val("");
});
/* 断开连接 */
$("button:eq(2)").click(function() {
socket.close();
});
});
script>
head>
<body>
<h1>WebSocket示例h1>
<input type="text" id="data" />
<button>打开连接button>
<button>发送数据button>
<button>关闭连接button>
<p id="msg">p>
body>
html>
return [
// 扩展自身需要的配置
'host' => '0.0.0.0', // 监听地址
'port' => 2346, // 监听端口
'root' => '', // WEB 根目录 默认会定位public目录
'app_path' => '', // 应用目录 守护进程模式必须设置(绝对路径)
'file_monitor' => false, // 是否开启PHP文件更改监控(调试模式下自动开启)
'file_monitor_interval' => 2, // 文件监控检测时间间隔(秒)
'file_monitor_path' => [], // 文件监控目录 默认监控application和config目录
// 支持workerman的所有配置参数
'name' => 'thinkphp',
'count' => 4,
'daemonize' => false,
'pidFile' => '',
];
6.config\worker_server.php
主要看worker_class代表:自定义服务类,需要在该位置建立对应文件,如第7项
return [
// 扩展自身需要的配置
'protocol' => 'websocket', // 协议 支持 tcp udp unix http websocket text
'host' => '0.0.0.0', // 监听地址
'port' => 2345, // 监听端口
'socket' => '', // 完整监听地址
'context' => [], // socket 上下文选项
'worker_class' => 'app\index\controller\Worker', // 自定义Workerman服务类名 支持数组定义多个服务
// 支持workerman的所有配置参数
'name' => 'thinkphp',
'count' => 4,
'daemonize' => false,
'pidFile' => '',
// 支持事件回调
// onWorkerStart
'onWorkerStart' => function ($worker) {
},
// onWorkerReload
'onWorkerReload' => function ($worker) {
},
// onConnect
'onConnect' => function ($connection) {
},
// onMessage
'onMessage' => function ($connection, $data) {
$connection->send('receive success');
},
// onClose
'onClose' => function ($connection) {
},
// onError
'onError' => function ($connection, $code, $msg) {
echo "error [ $code ] $msg\n";
},
];
7.worker_class位置:
在app/index/controller/新增Index.php,文件位置和名称随意,但要和worker_class.php中对应
namespace app\index\controller;
use think\facade\Db;
use think\worker\Server;
use Workerman\Lib\Timer;
define('HEARTBEAT_TIME', 20);// 心跳间隔55秒
class Worker extends Server
{
protected $socket = 'websocket://0.0.0.0:2345';
public function __construct()
{
parent::__construct();
$this->onMessage();
// 或者这样调用
$this->worker->onWorkerStart = function($worker)
{
echo "Worker starting...\n";
};
}
/**
* 收到信息
* @param $connection
* @param $data
*/
public function onMessage()
{
$this->worker->onMessage = function($connection, $data)
{
dump('参数:'.$data.'时间:'.date('Y-m-d H:i:s',time()));
$connection->send($data);
};
}
}
注意:protected $socket = ‘websocket://0.0.0.0:2345’; 这里我在刚开始写的时候被thinkphp文档误解了写成http://0.0.0.0:2345
这里使用的是重新安装thinkphp6之后直接做的workerman代码没有其他代码。
/app/websocket/view/index.html是客户端代码。
下载地址:
链接:https://pan.baidu.com/s/10x7BDIhSMyUvX-we3XgK6Q
提取码:6v4o
欢迎大家评论区留言或私信我~!!!