AmPHP 缓冲区永远持续下去
AmPHP buffer keeps going forever
我刚刚使用了 AmPHP,我正在尝试从我的 AmPHP http 服务器获取 post body,但是,它一直在运行(只是从不发回对我的客户)。
这是我目前使用的代码:
$resp = \Amp\Promise\wait($request->getBody()->buffer());
我已经测试了另一段代码,它不会永远持续下去,但是当我使用那段代码时,我无法在 onResolve
中的函数之外得到我的 body:
$resp = $request->getBody()->buffer()->onResolve(function($error, $value) {
return $value;
});
return $resp; // returns null
我也尝试了最后一点,但也只是 returns null
:
return yield $request->getBody()->buffer();
编辑:做了更多的修改,这是我当前的(仍然是 non-functional)代码(虽然为了简单起见已经删除了很多):
// Main loop
Loop::run(function() {
$webhook = new Webhook();
$resp = $webhook->execute($request);
print_r($resp); // null
});
// Webhook
class Webhook {
public function execute(\Amp\Http\Server\Request $request) {
$postbody = yield $request->getBody()->buffer();
return ['success' => true, 'message' => 'Webhook executed successfully', 'data' => $postbody];
}
}
将执行方法实现包装到 Amp\call() 到 return Promise 而不是 Generator。然后在主循环上产生结果以获取数组而不是 null。
// Webhook
class Webhook {
public function execute( \Amp\Http\Server\Request $request ) {
return Amp\call( function () use ( $request ) {
$postbody = yield $request->getBody()->buffer();
return [ 'success' => true, 'message' => 'Webhook executed successfully', 'data' => $postbody ];
} );
}
}
// Main loop
Loop::run( function () {
$webhook = new Webhook();
$resp = $webhook->execute( $request );
$output = yield $resp;
print_r( $resp ); // array with post body
} );
我刚刚使用了 AmPHP,我正在尝试从我的 AmPHP http 服务器获取 post body,但是,它一直在运行(只是从不发回对我的客户)。
这是我目前使用的代码:
$resp = \Amp\Promise\wait($request->getBody()->buffer());
我已经测试了另一段代码,它不会永远持续下去,但是当我使用那段代码时,我无法在 onResolve
中的函数之外得到我的 body:
$resp = $request->getBody()->buffer()->onResolve(function($error, $value) {
return $value;
});
return $resp; // returns null
我也尝试了最后一点,但也只是 returns null
:
return yield $request->getBody()->buffer();
编辑:做了更多的修改,这是我当前的(仍然是 non-functional)代码(虽然为了简单起见已经删除了很多):
// Main loop
Loop::run(function() {
$webhook = new Webhook();
$resp = $webhook->execute($request);
print_r($resp); // null
});
// Webhook
class Webhook {
public function execute(\Amp\Http\Server\Request $request) {
$postbody = yield $request->getBody()->buffer();
return ['success' => true, 'message' => 'Webhook executed successfully', 'data' => $postbody];
}
}
将执行方法实现包装到 Amp\call() 到 return Promise 而不是 Generator。然后在主循环上产生结果以获取数组而不是 null。
// Webhook
class Webhook {
public function execute( \Amp\Http\Server\Request $request ) {
return Amp\call( function () use ( $request ) {
$postbody = yield $request->getBody()->buffer();
return [ 'success' => true, 'message' => 'Webhook executed successfully', 'data' => $postbody ];
} );
}
}
// Main loop
Loop::run( function () {
$webhook = new Webhook();
$resp = $webhook->execute( $request );
$output = yield $resp;
print_r( $resp ); // array with post body
} );