当前位置:网站首页>【TP6】使用workerman websocket
【TP6】使用workerman websocket
2022-06-22 06:18:00 【wyy7293】
前置安装和使用 workerman
- 安装 和 使用
composer require topthink/think-workerphp think worker
websocket客户端示例代码
<!DOCTYPE html>
<html>
<head>
<title>HTML5</title>
<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() + "<br />" + e.data); }; socket.onclose = function() {
$("#msg").html($("#msg").html() + "<br />关闭连接..."); }; } catch(exception) {
$("#msg").html($("#msg").html() + "<br />有错误发生"); } }); /* 发送数据事件 */ $("button:eq(1)").click(function() {
/* 检查文本框是否为空 */ if($("#data").val() == "") {
alert("请输入数据!"); return; } try {
socket.send($("#data").val()); $("#msg").html($("#msg").html() + "<br />发送数据:" + $("#data").val()); } catch (exception) {
$("#msg").html($("#msg").html() + "<br />发送数据出错"); } /* 清空文本框 */ $("#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>
config/worker.php配置(这里可以不改)
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' => '',
];
config\worker_server.php
主要看worker_class代表:自定义服务类,需要在该位置建立对应文件
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";
},
];
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);
};
}
}
- 启动
php think worker:server
连接失败常见问题
- 防火墙未放行2345和2346端口
- 服务端放行地址是0.0.0.0客户端如果写成127.0.0.0会连接不上,应该使用外网地址
示例代码
链接:https://pan.baidu.com/s/1DhsU84YTFsi15lY5jTD7vA
提取码:haha
边栏推荐
- reduce_ Reduction in sum()_ indices
- 【雲計算重點複習】
- SQLServer中的子查询
- SQL injection vulnerability (XIV) XFF injection attack
- What is JUC
- idea本地运行scope
- 纵向求最大最小与横向求最大最小greatest(),least(),max(),min()
- 单细胞论文记录(part9)--Spatial charting of single-cell transcriptomes in tissues
- Vertical maximum and minimum and horizontal maximum and minimum greatest(), least(), max(), min()
- clickhouse对比两台机器数据
猜你喜欢

You are using PIP version 19.0.3, however version 22.1.2 is available

Geoswath plus technology and data acquisition and processing

Little bear school bearpi HM micro officially integrated into openharmony trunk

MiniGUl 1.1.0版本引入的新GDI功能和函数(二)

Shengxin visualization (Part4) -- correlation diagram

simulink中搭建专家pid控制

No business series 7: removing spots from old photos

ReadWriteLock

SQL injection vulnerability (XI) wide byte injection

Array and foreach traversal in C #
随机推荐
生信可视化(part3)--小提琴图
纵向求最大最小与横向求最大最小greatest(),least(),max(),min()
ForkJoinPool
R语言观察日志(part24)--writexl包
Expert system clips from introduction to mastery (I) introduction and overview of clips
On the matrix order of MNIST linear model
Performance comparison and analysis
单细胞论文记录(part6)--SpaGE: Spatial Gene Enhancement using scRNA-seq
swagger常用注解汇总
878. 第 N 个神奇数字 数学+二分
【NAND文件系统】UBIFS介绍
SQL 注入漏洞(十四)xff 注入攻击
五大常考SQL面试题
四大函数式接口(必需掌握)
[technical notes]
【Rust笔记】03-引用
【雲計算重點複習】
leetcode每周3道(八)图之最短路
【Rust笔记】04-表达式
Single cell paper record (Part11) -- clustermap for multi-scale clustering analysis of spatial gene expression