PHP 使用 grpc 的问题
最近在学习 grpc 发现 V2ray的 API 是使用 grpc 写的,于是上手试试。遇到以下问题
- 消息发送后接收到回复处理时,php 抛出 fatalerror
<?php
require_once __DIR__ . '/vendor/autoload.php';
try {
$client = new V2ray\Core\App\Stats\Command\StatsServiceClient('1.1.1.1:8080', [
'credentials' => Grpc\ChannelCredentials::createInsecure(),
]);
$request = new V2ray\Core\App\Stats\Command\GetStatsRequest();
$request->setName('user>>>10000@aaa.net>>>traffic>>>downlink');
$obj = $client->GetStats($request);
$obj2 = $obj->wait();
var_dump($obj2);
}catch (Throwable $e){
echo $e->getMessage();
var_dump($e->getTrace());
}
?>
output
string(46) "\V2ray\Core\App\Stats\Command\GetStatsResponse"
bool(true)
PHP Fatal error: Cannot access private properties. in /Users/v2ray/vendor/grpc/grpc/src/lib/AbstractCall.php on line 147
Fatal error: Cannot access private properties. in /Users/v2ray/vendor/grpc/grpc/src/lib/AbstractCall.php on line 147
- 端点调试 找到问题所在文件 /Users/v2ray/vendor/grpc/grpc/src/lib/AbstractCall.php 出错位置 为 第134行附近的_deserializeResponse()方法
protected function _deserializeResponse($value)
{
if ($value === null) {
return;
}
// var_dump('fsdfasdfsdfsdf');
// var_dump($this->deserialize);
// Proto3 implementation
if (is_array($this->deserialize)) {
list($className, $deserializeFunc) = $this->deserialize;
var_dump($className);
var_dump(class_exists($className));
$obj = new $className();
var_dump($obj); //这里开始抛出错误
var_dump('方法存不存在!');
var_dump(get_class_methods($obj, $deserializeFunc));
// exit;
// sleep(2);
if (method_exists($obj, $deserializeFunc)) {
$obj->$deserializeFunc($value);
} else {
$obj->mergeFromString($value);
}
return $obj;
}
// Protobuf-PHP implementation
return call_user_func($this->deserialize, $value);
}
output:
string(46) "\V2ray\Core\App\Stats\Command\GetStatsResponse"
bool(true)
PHP Fatal error: Cannot access private properties. in /Users/hainuo/Downloads/Shadowsocks/vendor/grpc/grpc/src/lib/AbstractCall.php on line 147
Fatal error: Cannot access private properties. in /Users/hainuo/Downloads/Shadowsocks/vendor/grpc/grpc/src/lib/AbstractCall.php on line 147
发现由protoc
生成的类 一旦进行 new
操作后,调用时就出错。
/**
* Generated from protobuf message <code>v2ray.core.app.stats.command.GetStatsResponse</code>
*/
class GetStatsResponse extends \Google\Protobuf\Internal\Message
通过这里可以看到这里继承的是 protobuf 的 message 类。
实在找不到错误了,还请大家帮忙出处意见 如何进行调试怎么解决这个问题
环境如下
Installed packages, channel pecl.php.net:
=========================================
Package Version State
grpc 1.12.0 stable
protobuf 3.6.0 stable
swoole 2.1.3 stable
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
已经解决 原因时这个类包含的内容都是私有的,所以直接调用就会报错
请问一下,关于v2ray的php grpc您研究的如何了