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