前言
第一部分: 半协程调度器
- 统一生成器接口
- 生成器迭代
- 生成器返回值
- 生成器委托
- 改写 return
- 抽象异步模型
- 引入异常处理
- 异常: 嵌套任务透传
- 异常: 传递流程
- 异常: 重新进行 CPS 变换
- 异常: 重新加入 Async
- Syscall 与 Context
- 调度器: 里程碑
- spawn
- callcc
- race 与 timeout
- all 与 parallel
- channel 与协程间通信
- 无缓存 channel
- 缓存 channel
- channel 演示
- FutureTask 与 fork
第二部分: Koa
- 穿越地心之旅
- 洋葱圈模型
- rightReduce与中间件compose
- Koa::Application
- Koa::Context
- Koa::Request
- Koa::Response
- Koa - HelloWorld
- Middleware Interface
- Middleware: 全局异常处理
- Middleware: Router
- Middleware: 请求超时
- 一个综合示例
附录
参考
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
第一部分: 半协程调度器
谈及koa(1.x)首先得说co,co与Promise是JSer在解决回调地狱(callback hell)问题前仆后继的众多产物之一。
co其实是Generator的自动执行器(半协程调度器): 通过yield显式操纵控制流让我们可以做到以近乎同步的方式书写非阻塞代码。
Promise是一套比较完善的方案,但关于如何实现Promise本身超出本文范畴, 且PHP没有大量异步接口的历史包袱需要thunks方案做转换。
综上所述, 我们的调度器仅基于一个简单的接口,来抽象异步任务:
<?php
interface Async
{
/**
* 开启异步任务,完成是执行回调,任务结果或异常通过回调参数传递
* @param callable $callback
* continuation :: (mixed $result = null, \Exception|null $ex = null)
* @return void
*/
public function begin(callable $callback);
}
- 对co库不了解的同学可以先参考阮一峰 - co 函数库的含义和用法
- co新版与旧版的区别在于对thunks的支持, 4.x只支持Promises.
我们首先构建Koa的基础设施,渐进的实现一个约50+行代码的精练的半协程调度器。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论