swoole 框架 swoft2.0 实战

源码地址:https://gitee.com/huxiaobai_001/swoft2.0.g...
源码私有 获取请加微信或 qq:
微信号:15275411187
QQ 号码:495681586
项目 docker 部署
涉及到的知识点总结:
http 服务:
1. 响应数据
2. 重定向
3. 请求对象
4. 响应自定义函数的封装之使用
5. 获取请求路径 端口号 等其他
6. 控制器请求前缀
7. 请求控制器里面的方法 记得 route method 以及书写格式 test1 而不是别的比如 /test1 要知道为啥
8. 获取请求对象和响应对象 有三种方法 这只是其中一种 去看手册
9. 全局中间件 在 bean.php 当中配置 如何创建中间件 注意里面必须 @bean () 分请求前和请求后中间件 去看案例即可
10. 控制器层面的中间件 控制器层面中间件和全局中间件请求前请求后执行顺序问题 详见 swoft2 学习笔记
11. 方法层面的中间件 详见 TestController.php 类里面的 test5 () 案例
12.get 请求的时候直接传递参数进来 注意路由的写法 test2/{userename} 并且这里是 username 那么在 test2 (string $username) 括号当中也必须是 username
13. 依赖注入的形式使用 request 请求对象

  1. $request->raw () 接受发送过来的原始数据
  2. $request->getBody ()->getContents () 也可以接收发送过来的原始数据
  3. 利用两种方式接收发送过来的 json 原始数据 并转成数组形式
  4. $request->getHeader (‘content-type’) 获取请求头信息里面的 content-type
  5. jsonForObject () 公共函数当中做了判断 不管是 post 还是 get 请求 只要是 jsonForObject () 括号当中不传参 咋返回接受到的参数的数组形式
  6. jsonForObject () 函数的使用 不传参的时候返回 get 或者 post 过来的参数的数组形式
  7. jsonForObject () 传参的情况下将 json 参数映射到实体 通过对象化的形式访问实体里面的参数案例 请去参考 TestController.php 里面的 test9 () 方法 已经 test13 () 方法的小案例
  8. 获取 bean 配置内容 案例: TestController.php 里面的 test10 () 方法
  9. 要知道 /** @var $testObj TestJsonToObjEntity */ 是干啥的 主要就是为了有提示功能 $testObj->getXXX () 起一个代码提示作用
  10. DB::table () 表里面写没有前缀的表名称 不用建模型 也不用建实体 直接用就行 更多使用参考手册吧
  11. DB::selectOne () 等的原生 sql 的操作 参考手册吧
  12. 同一台服务器切库以及不同服务器之间切库案例 请参考 TestController.php 当中的 test11 小案例
  13. 模型实例的创建 如何使用命令来创建模型实体 参考有道云笔记里面 “10. 模型的生成”
  14. 模型实体查询出来的结果 如何转变成数组 直接使用结果集调用 toArray () 即可
  15. 要知道验证器当中发生错误的时候会将详细的错误信息返回给客户端 这是没有必要的 如何处理 详见《swoft2 学习笔记》当中的 “统一异常处理总结”
  16. 业务处理的时候 也会发生错误 这个时候可以使用自定义的异常错误处理程序 详见《swoft2 学习笔记》当中的 “统一异常处理总结” App\Exception\Handler\ApiExceptionHandler 当中返回的地方还可以加上 code file 等字段信息
  17. 控制器层面注解式验证器的使用 默认 get 请求的话 是不支持验证器的使用的 所以需要如何处理在 product.php 当中的 yzqValidator () 方法当中有明确的解释
  18. 非注解验证器的使用 不区分 get 还是 post
  19. 自定义验证器规则的使用 详情参考《swoft2.0 学习笔记》当中的 “自定义验证器规则验证”
  20. jsonForObject () 不传递模型实体 就是获取 get post 参数的数组形式 传递则是 将参数映射到模型实体当中去 但仅仅针对的是这种类型:{“orderId”:123,”orderNo”:”MPV001”,”userId”:”001”,”orderStatus”:2,”orderMoney”:20000}
  21. mapToModelsArrary () 也是将参数映射到模型实体 但是不同的是 第一个参数必须是数组形式 所以前端请求的数据类型 也必须是数组形式的才行或者在后端形成一个数组传递进去也行:{“prodItems”:[{“orderId”:”2342342”,”orderNo”:”MPV00”,”userId”:”001”,”orderStatus”:”1”,”orderMoney”:”12.2”}]}
  22. mapToModelsArrary () 的使用详情参考 TestController 当中的 test18 () 方法
  23. jsonForObject () 和 mapToModelsArrary () 都可以将参数转换成实体模型的对象 直接调用 save () 进行数据的保存或者修改操作 只不过是传递进去的参数不同而已
  24. 如果数据库当中的字段是 admin_id 那么数据模型当中的属性就应该是 adminId 前端传递参数的时候需要和模型实体里面保持一致 为 adminId 才行
  25. 数据库的事务操作 没有封装时候的事务操作 以及 封装好的 sws () 事务函数的使用
  26. sgo () 协程的使用 这个手册当中没能找到 不要理解成协程任务 是协程 利用协程来处理东西
  27. redis 的链接 bean.php 当中配置 redis 的链接
  28. redis 切库 从 0 库 切换到 1 库 去访问 1 库里面的元素的值 详见 TestController.php 当中的 test23 () 方法案例
  29. 异常的处理 TestController 当中的 test14 () 方法当中有案例 swoft2 学习总结当中有总结文档
  30. 异步任务 比如异步 redis 异步 mysql 的使用 异步 IO 的处理 TestController 当中的 test23 () 方法当中就用到了异步 redis 任务 投递任务
  31. 用户自定义进程的使用 TestController 当中的 test23 () 当中通过异步 redis 插入元素到 redis 然后通过用户自定义进程对订单状态进行了处理
  32. redis 的订阅与分布 以及 redis 的有序集合的使用
  33. 如何打印原生 sql 语句
  34. 对象结果集转化为数组 toAarray ()
  35. 投递协程任务以及投递多协程任务
  36. 自定义命令的使用

websocket 服务:
用到的镜像:
1. 前端链接 ws 服务
2. 链接上服务器之后的回调 在回调当中可以去做一些初始化的操作
2.1 前端 js 当中请求消息控制器里面的某个方法 发送消息内容
3. 前端 js 当中接收服务端发送的内容时候的回调
4. 消息控制器的使用 设置 ws 的访问路径
5. 服务端链接上 websocket 的时候要执行该方法 不要少了注解
6. 给消息控制器起一个别名 链接上服务器之后的前端回调里面可以请求消息控制器里面具体的某个方法 ws.send (“user.age:this is age”)
7. 消息控制器当中通过 Message 类里面的方法获取消息内容 注意:Message 类当中是获取不到 fd 访客唯一标识的 得用 Request 类
8.Session::mystGet ()->push () 的形式发送消息到前端用户
9. 通过 Request () 对象获取连接用户的唯一标识
10. 通过 serever ()->sendTo () 向客户端发送 json 形式的内容
11.JSON 协议通信数据结构 去看手册 https://www.swoft.org/docs/2.x/zh-CN/webso...
12.const req = {cmd:’cast.top’,data:{},ext:{}}
ws.send (JSON.stringify (req));// 请求 cast.top 获取直播间列表数据
前端发送 json 字符串格式的参数到后端 ws 服务
13.server ()->sendTo () 推送给指定用户消息
14. 推送给全部连接用户某些消息 server ()->sendToAll ()
15. 推送给部分用户某些消息 server ()->sendToSome ();
16./*
* 文字直播系统思路整理:
* 通过上边进入直播间和退出直播间我们已经明白
* 用户进入直播间的时候带着 用户名称 和 房间号 id
* 然后我们通过 redis 里面的 hash 类型 用 cast. 房间号做 key 值 将 username=> 用户连接 ws 的唯一标识 放到 cast. 房间号 里面去
* 然后我们再获取当前房间里面所有的人的链接 ws 的唯一标识
* 将 XXX 进入该房间的信息推送给在该房间的所有的人
* 那么 文字直播也是一样的 只不过从前端传递过来的时候多了个参数:发表的内容
* 然后也是和上边一样 这里就是将发布的内容推送到该房间里面的所有的人即可实现文字直播间的功能
* */

本作品采用《CC 协议》,转载必须注明作者和本文链接
胡军