Skip to content

[QUESTION] 请问咱们 GRPC 客户端在 swoole 4.5 下可用吗? node 的客户端测试正常,但咱们客户端报 No Response #2183

@yansongda

Description

@yansongda

Before you submit this issue, you has been search all existed issues and search the documentation

  • I've been search all existed issues
  • I've been read all documentation

Describe your question

不知道是否和 #1421 有关?

proto 文件

syntax = "proto3";

package cti;

message AgentCmdRequest {
    string jsonRequest = 1;
}

message AgentCmdReply {
    string jsonReply = 1;
}

service Cti {
    rpc AgentCmd ( AgentCmdRequest) returns ( AgentCmdReply) {}
}

mac 下使用 protoc 生成代码后

/**
     * @RequestMapping(path="fuck", methods={"POST"})
     */
    public function call(): array
    {
        (new CtiGrpc('172.25.1.124:5027', ['credentials' => null]))->fuck('{"action":15,"fuck":"6690170531783684096"}');

        return $this->success();
    }

client 客户端

<?php

declare(strict_types=1);

namespace App\Util\Grpc;

use App\Util\Logger;
use Cti\AgentCmdReply;
use Cti\AgentCmdRequest;

class CtiGrpc extends AbstractClient
{
    public function fuck(string $data)
    {
        $arg = (new AgentCmdRequest())->setJsonRequest($data);

        $response = $this->_simpleRequest('/cti.Cti/AgentCmd', $arg, [AgentCmdReply::class, 'decode']);

        Logger::info('response', $response);

        return $response;
    }
}

最后,请求 fuck,没有一次成功的,每次都是报

[2020-07-25 20:35:53 *17013.1]	NOTICE	http2 stream#1 belongs to an unknown type or it never registered
[2020-07-25T20:35:56.557711+08:00] app.INFO: response {"0":"No response","1":-1,"2":false}

目前,看了相关源码,暂未找到问题,没有头绪,所以请教下

感谢

ps:服务端是 c 写的,附 nodejs 客户端源码

var grpc = require('@grpc/grpc-js');
var protoLoader = require('@grpc/proto-loader');
var PROTO_PATH = 'cti.proto';

var arguments = process.argv.splice(2);

var srv_addr="127.0.0.1:5027";
var message;
if(arguments.length < 1){
    console.log("parms too low!");
    help();
    process.exit(0);
}else if(arguments.length == 1){
    message = arguments[0];
}else{
    srv_addr = arguments[0];
    message = arguments[1];
}
var packageDefinition = protoLoader.loadSync(
    PROTO_PATH, {
        keepCase: true,
        longs: String,
        enums: String,
        defaults: true,
        oneofs: true
    });

var cti_proto = grpc.loadPackageDefinition(packageDefinition).cti;


// 指定地址和端口号
var client = new cti_proto.Cti(srv_addr, grpc.credentials.createInsecure());

console.log("grpc host["+srv_addr+"] message["+message+"] start...");

client.AgentCmd({
    jsonRequest: message
}, function(err, response) {
    if (err !== null) {
        console.log("grpc error:"+err);
        process.exit(0);
    }
    console.log('Greeting:', response);
    process.exit(0);
});

执行 node g-client.js '{"action":15,"fuck":"6690170531783684096"}' 后,是可以正常返回的

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions