热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Swoole整合ThinkPHP3.2系列教程三

使用说明:作为管理员:0.安装swoole扩展swoole项目已收录到PHP官方扩展库,直接使用:-peclinstallswoole1.启动swoole服务在cli模式下

使用说明:

作为管理员:

0.安装swoole扩展
swoole项目已收录到PHP官方扩展库,直接使用:
- pecl install swoole

1.启动swoole服务
在cli模式下,进入Swoole目录,执行以下命令行:
- php swoole.php start

2.柔性重启swoole服务
用于SwooleController框架里的代码更新时,执行以下命令行重新加载代码:
- php swoole.php reload

3.关闭swoole服务
- 直接用kill命令杀死swoole主进程即可(除非特殊情况),一般使用柔性重启就会重启worker进程

4.常用的一些命令:
- lsof -i:9501 查看端口的使用情况
- ps -aux|grep swoole 查看swoole的进程(通常是有一共会创建2 + n + m个进程,其中n为Worker进程数,m为TaskWorker进程数,2为一个Master进程和一个Manager进程,需要修改worker进程和task进程的数量,修改Server.php里的option)


作为开发者:

  • 尽管放心大胆地把你的耗时操作的业务逻辑代码写到Cli模块下的SwooleController里。
  • 当浏览器需要请求耗时任务之前,必须去业务服务器swooleLog表里备案一下,即获取swoole_log表里的ID,携带这个ID去请求swoole服务,否则swoole忽略此次请求,但并不会关闭连接。
  • 我们约定请求耗时操作或者任务的过程按照如下规则进行:
1. 浏览器请求业务服务器,备案此次操作,主要包括耗时操作的function名字以及参数存入业务服务器那边的SwooleLog表(注意重复任务不要多次提交,记得排重)
2. 业务服务器返回浏览器swoole服务的连接地址,以及备案的log_id
3. 浏览器收到业务服务器的返回值以后,创建websocket客户端:
ws = new WebSocket(config.server+'?uid=1');//请求的连接地址使用get请求加上uid
请求swoole服务执行该任务我们约定请求swoole时的数据格式按如下规则统一:
{
cmd:"test" ,//SwooleController里必须有对应的方法名称,
args:{
id: 1,//SwooleLog表里的id
...//其他需要携带的参数

}
}
4. 处理websocket收到消息时的回调
wx.Onmessage=function(e){
var message = JSON.parse(e.data);
}

swoole服务的返回值

code info
202 任务已经提交,请等待服务器计算数据!
404 任务提交失败,请联系管理员进行处理!
200 任务执行完毕!

附上一份JS版的websocket代码案例(暂不支持低版本IE,近期会想办法解决)

function swooleClient(){
var cOnfig= {
'server' : 'ws://192.168.0.166:9501',
};

var ws = {};

$(document).ready(function () {
ws = new WebSocket(config.server+'?uid=1');
listenEvent();
});

function listenEvent() {
/**
* 连接建立时触发
*/

ws.Onopen= function (e) {
//连接成功
console.log("connect webim server success.");
//发送登录信息

ws.send(JSON.stringify({
cmd : 'test',
args : {
id : 3,
name: '哈哈'
}
}));
};

//有消息到来时触发
ws.Onmessage= function (e) {
console.log(e);
var message = JSON.parse(e.data);
$(document.body).html("

"+message.info+"

"
);
};

/**
* 连接关闭事件
*/

ws.Onclose= function (e) {
$(document.body).html("

连接已断开,请刷新页面重新登录。

"
);
};

/**
* 异常事件
*/

ws.Onerror= function (e) {
$(document.body).html("

服务器"+
": 拒绝了连接. 请检查服务器是否启动.

"
);
console.log("onerror: " + e.data);
};
}

推荐阅读
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
  • Spring Boot 入门指南
    本文介绍了Spring Boot的基本概念及其在现代Java应用程序开发中的作用。Spring Boot旨在简化Spring应用的初始设置和开发过程,通过自动配置和约定优于配置的原则,帮助开发者快速构建基于Spring框架的应用。 ... [详细]
  • .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
    .NETCore中的一个接口多种实现的依赖注入与动态选择看这篇就够了最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的 ... [详细]
  • Eclipse 中 JSP 开发环境配置指南
    本文详细介绍了如何在 Eclipse 集成开发环境中配置 JSP 运行环境,包括必要的软件下载、Tomcat 服务器的配置以及常见问题的解决方法。 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本指南详细介绍了如何在 CentOS 7.0 系统上部署 Spring Boot 2.x 应用程序,包括必要的配置和步骤。 ... [详细]
  • 本文针对Windows 7环境下使用IIS 7.5和.NET Framework 4.0时遇到的ASP.NET设置不适用于集成托管管道模式的问题,提供了一个有效的解决方案。通过调整web.config文件中的特定配置,可以轻松解决此问题。 ... [详细]
  • 本文探讨了如何在TWiki中配置自定义标记,以实现特定字符串(如#12345)自动转换为指向票务系统的超链接。此功能类似于在其他平台上的实现,旨在提高信息检索效率。 ... [详细]
  • VMware Horizon View 5.0桌面虚拟化部署实践与心得
    在近期的研究中,我花费了大约两天时间成功部署了桌面虚拟化环境,并在此过程中积累了一些宝贵的经验。本文将分享这些经验和部署细节,希望能对同样关注桌面虚拟化的同行有所帮助。 ... [详细]
  • 本文档详细介绍了在 Kubernetes 集群中部署 ETCD 数据库的过程,包括实验环境的准备、ETCD 证书的生成及配置、以及集群的启动与健康检查等关键步骤。 ... [详细]
  • 本文介绍了如何通过自定义配置类,利用 `WebMvcConfigurer` 接口来扩展 Spring MVC 的功能,实现默认首页的自动跳转,同时避免使用 `@EnableWebMvc` 注解全面接管 Spring MVC 的默认配置。 ... [详细]
  • 构建首个Spring MVC应用程序
    本指南将指导您如何从零开始创建一个简单的Spring MVC应用,涵盖项目模块创建、依赖管理、核心配置及控制器开发等关键步骤。 ... [详细]
  • 深入理解Kafka架构
    本文将详细介绍Kafka的内部工作机制,包括其工作流程、文件存储机制、生产者与消费者的具体实现,以及如何通过高效读写技术和Zookeeper支持来确保系统的高性能和稳定性。 ... [详细]
  • 本文详细探讨了虚拟化的基本概念,包括服务器虚拟化、网络虚拟化及其在云计算环境中的应用。特别强调了SDN技术在网络虚拟化和云计算中的关键作用,以及网络虚拟化技术如何提升资源利用效率和管理灵活性。 ... [详细]
author-avatar
mobiledu2502885323
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有