能否提供一个注册协程创建后的前置回调
比如:
Swoole\Coroutine::before(callable $function);
注册之后使用Swoole\Coroutine::create创建新协程后,都先在该新协程内执行下已注册的回调,方便做一些此协程的初始化
开发swoole的框架会有这样的需求,需要对用户自己新创建的协程做一些数据初始化,比如把父协程的context里的一些数据写入到当前的context里
现在只能是框架内提供了一个对Swoole\Coroutine::create封装后的函数给用户使用
用户直接使用Swoole\Coroutine::create就会有问题
如果需要交换两个协程的数据,可以使用channel。
你没明白我的意思,我要的不是交换数据的功能,交换数据的方法有很多,我要的是用户创建协程后能自动交换数据
目前主流解决方案是自己再封一层,底层不会提供这种功能。
目前主流解决方案是自己再封一层,底层不会提供这种功能。
目前大部分都自己再封一层就是因为没其他办法,还需要在文档里特别注明不能直接使用swoole提供的go, 如果底层能提供这种功能,我想大家还是很乐见的
虽然是一个好的提议,但是我感觉这应该是 php 语言应该做的事情,而不是 swoole 层。若语言层面有 AOP 的能力,在任意一个函数执行前后插入函数调用。类似于 java 的 agent 技术,可惜 php 中并没有这样的功能。
若 swoole 层面增加,实际上是打开了一个潘多拉魔盒,光增加一个 协程创建回调是远远不够的,很多地方都需要插桩,把整个底层逻辑搞得非常复杂,导致用户心智负担过高。
我觉着还是倾向于 @twose 的提议,自己封装一层,若用户使用了封装后的 API 接口,表示用户已经了解了协程创建前后存在的回调行为。若用户直接使用底层的 go ,表示用户不了解,不存在任何回调。