thinkphp6 使用Workerman测试

news/2024/11/20 16:36:59/文章来源:https://www.cnblogs.com/wjs2019/p/18289547

1.首先通过 composer 安装 think-worker、think-view

composer require topthink/think-worker
composer require topthink/think-view

安装成功后在项目的config目录会新增3个配置文件

 2.修改woker.php中监听的端口

return [// 扩展自身需要的配置'host'                  => '127.0.0.1', // 监听地址'port'                  => 8000, // 监听端口'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'               => '',
];

3.在项目根目录publick下新建文件 wokerman.php。

<?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006-2019 http://thinkphp.cn All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// [ wokerman启动文件 和整个项目无关联]namespace think;use Workerman\Worker;require_once __DIR__ .'/../vendor/workerman/workerman/Autoloader.php';// 创建一个Worker监听8000端口,使用http协议通讯

$http_worker = new Worker("http://127.0.0.1:8000");// 启动4个进程对外提供服务

$http_worker->count= 4;$http_worker->onConnect = function ($connection)
{echo 'connect success!';$connection->onWebSocketConnect = function ($connection) {$connection->maxLifetime = 1800;};
};// 接收到浏览器发送的数据时回复hello world给浏览器
$http_worker->onMessage =function($connection,$data)
{
// 向浏览器发送hello world$connection->send('服务端返回'.$data);
};//断开链接
$http_worker->onClose = function ()
{echo 'connect closed!';
};// 运行worker
Worker::runAll();

在cmd窗口运行php文件

 4.新建一个路由测试前端连接

Route::get('wokerman', 'index/wokerman');

在Index控制器编写测试方法

public function wokerman(){return View::fetch();}

5.创建前端模板文件,目录为

 模板文件代码如下;

<!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://127.0.0.1:8000");/* 绑定事件 */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>

6.测试前端连接wokerman

 

前端:

 后端:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/740454.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ Boost 字符串处理库

Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备,通常被称为准标准库,是C标准化进程的重要开发引擎之一。使用Boost库可以加速C应用程序的开发过程…

LLM推理引擎怎么选?TensorRT vs vLLM vs LMDeploy vs MLC-LLM

LLM擅长文本生成应用程序,如聊天和代码完成模型,能够高度理解和流畅。但是它们的大尺寸也给推理带来了挑战。有很多个框架和包可以优化LLM推理和服务,所以在本文中我将整理一些常用的推理引擎并进行比较。 https://avoid.overfit.cn/post/33f6420c91e74c0eb8d6737cb9471e27…

WPF ComboBox数据绑定:初始化动态加载ItemsSource后首次赋值Text不显示问题解决

原来:<ComboBox Text="{Binding Item}" ItemsSource="{Binding ItemLists}"></ComboBox>private void Paras_Init(){ItemLists = new ObservableCollection<string>();ItemLists.Add("11111");ItemLists.Add("22222&qu…

多边形填充-活动边表法

参考文档: 参考1:https://blog.csdn.net/u013044116/article/details/49737585 参考2:https://blog.csdn.net/keneyr/article/details/83747501 算法思想: 对多边形沿y轴从0开始遍历,建立边表NET。只记录顶点的x, dx, ymax。 根据NET构建活动边表AET(activate edge table)…

WebOffice在线编微软Offfice,并以二进制流的形式打开Word文档

在日常办公场景中,我们经常会遇到这种场景:我们的合同管理系统的各种Word,excel,ppt数据都是以二进制数组的形式存储在数据库中,如何从数据库中读取二进制数据,以二进制数据作为参数,然后加载到浏览器的Office窗口,实现在线编辑Office的功能呢? 猿大师办公助手是猿大师旗…

香橙派编译linux内核支持ebpf和虚拟WIFI

前言 上一篇文章香橙派5plus上跑云手机方案一 redroid(带硬件加速)中说了怎么运行redroid,这篇补一下怎么修改参数编译内核。 补充 上篇文章有个内容需要补充一下:更新完内核需要用下面的命令防止内核被apt更新,不然后面使用apt update又回到官方的内核(注意版本号,当前是1…

太强了!这款仿微信的聊天工具开源了!

盒子IM —— 一个仿微信实现的网页版聊天软件,支持私聊、群聊、离线消息、发送语音、图片、文件、emoji 表情等功能,不依赖任何第三方收费组件。大家好,我是 Java陈序员。 问君能有几多愁,开源项目解千愁! 今天,给大家介绍一个开源的仿微信聊天工具,同时支持 PC 端、移动…

Python 进度条tqdm

在编写Python脚本时,尤其是那些需要处理大量数据或者执行耗时操作的脚本,监控任务进度是非常重要。 tqdm的安装pip install tqdm -i https://pypi.tuna.tsinghua.edu.cn/simple/基本用法from tqdm import tqdm import timefor i in tqdm(range(100)):time.sleep(0.1) # 模拟…

zotero驯服第一期

初始学习网址:https://blog.csdn.net/m0_56896669/article/details/136580119 遇到问题:脚注里面有引用还有编号,PDF引用格式错误 Zotero中文社区:https://zotero-chinese.com/user-guide/ --相当于这个软件的百科全书 But 找了半天没找到想要的,用不明白,算了,…

一个难忘的json反序列化问题

前言 最近我在做知识星球中的商品秒杀系统,昨天遇到了一个诡异的json反序列化问题,感觉挺有意思的,现在拿出来跟大家一起分享一下,希望对你会有所帮助。 案发现场 我最近在做知识星球中的商品秒杀系统,写了一个filter,获取用户请求的header中获取JWT的token信息。 然后根…

windows mysql执行sql文件

背景 快速导入数据表或者数据库。 解决 直接执行sql文件。虽然直接复制内容也行,但是还是执行文件更好一些。登录mysql -u root -p -D xxx-D指定数据库的名称。如果不写,可以在进入mysql命令行后,使用use xxx来使用数据库。执行source xxx.sql特别注意,哪怕路径里有空格,外…

GERL论文阅读笔记

Graph Enhanced Representation Learning for News Recommendation论文阅读笔记 这篇文章是2020年的,也算是比较老的了,但是比较经典,这里来读一下 Abstract 存在的问题: ​ 现有的新闻推荐方法通过从新闻内容和用户与新闻的直接交互(如点击)中建立精确的新闻表征来实现个…