Open tai1030 opened 5 years ago
服務端: Swoole Hprose 客戶端: PHP Hprose
在客戶端創了個協程,協程中使用yield等待返回異步方法結果。 請問為什麼結果會是response read error? 但是,把服務端及客戶端由tcp改為http,就能正常操作。
\Hprose\Future\co(function() { $rpc = new \Hprose\Socket\Client("tcp://localhost:2099", true); $session = $rpc->session; try { $result1 = yield $session->test1(); $result2 = yield $session->test2($result1); $session->testLog($result2); }catch (\Exception $e) { $session->testLog($e->getMessage()); $session->testLog($e->getTraceAsString()); } }
Result:
string(19) "response read error" string(885) "#0 D:\AppServ\www\test-hprose-laravel-client\vendor\hprose\hprose\src\Hprose\Socket\HalfDuplexTransporter.php(42): Hprose\Socket\Transporter->getLastError('response read e...') #1 D:\AppServ\www\test-hprose-laravel-client\vendor\hprose\hprose\src\Hprose\Socket\Transporter.php(136): Hprose\Socket\HalfDuplexTransporter->asyncReadError(Object(stdClass), Resource id #235, 0) #2 D:\AppServ\www\test-hprose-laravel-client\vendor\hprose\hprose\src\Hprose\Socket\Transporter.php(275): Hprose\Socket\Transporter->asyncRead(Resource id #235, Object(stdClass)) #3 D:\AppServ\www\test-hprose-laravel-client\vendor\hprose\hprose\src\Hprose\Socket\Client.php(107): Hprose\Socket\Transporter->loop() #4 D:\AppServ\www\test-hprose-laravel-client\vendor\hprose\hprose\src\Hprose\Socket\Client.php(44): Hprose\Socket\Client->loop() #5 [internal function]: Hprose\Socket\Client->__destruct() #6 {main}"
服務端就是簡單一個swoole的程序:
<?php require_once "vendor/autoload.php"; use Hprose\Swoole\Server; function session_testLog($text) { var_dump($text); } function session_test1() { return 'abc'; } function session_test2($text) { return 'Input text: ' . $text; } $server = new Server('tcp://0.0.0.0:2099'); $server->addFunction('session_getSession'); $server->addFunction('session_testLog'); $server->addFunction('session_test1'); $server->addFunction('session_test2'); $server->start();
我也不清楚。目前的 TCP 实现过于复杂,我也不知道问题在哪儿。新版本会简化客户端实现,到时候也许这个问题就没了。
服務端: Swoole Hprose 客戶端: PHP Hprose
在客戶端創了個協程,協程中使用yield等待返回異步方法結果。 請問為什麼結果會是response read error? 但是,把服務端及客戶端由tcp改為http,就能正常操作。
Result:
服務端就是簡單一個swoole的程序: