sogou / srpc

RPC framework based on C++ Workflow. Supports SRPC, Baidu bRPC, Tencent tRPC, thrift protocols.
Apache License 2.0
1.95k stars 385 forks source link

支持UNIX Domain socket吗? #268

Open yongxiangzheng opened 1 year ago

yongxiangzheng commented 1 year ago

请问 支持UNIX Domain socket方式的进程间通讯吗?

Barenboim commented 1 year ago

支持。自定义协议的例子,tutorial-10里,就有uds的示例代码。

Barenboim commented 1 year ago

噢噢,这是srpc项目啊。你想到workflow的项目里看一下。srpc的server端肯定是支持的,client我看看能不能配uds地址。

Barenboim commented 1 year ago

我看了一下,RPCClientParams好像不支持传入sockaddr:

struct RPCClientParams
{
    RPCTaskParams task_params;
//host + port + is_ssl
    std::string host;
    unsigned short port;
    bool is_ssl;
//or URL
    std::string url;
    std::string caller;
};

这个我们可以考虑加一下。不过,一般来讲,uds的话自定义协议是不是就可以了,没必要用带IDL的rpc?

yongxiangzheng commented 1 year ago

嗯嗯,建议可以加下,我是认为使用自定义协议,那就得需要自己再封装socket,计划是找一个能有支持uds的rpc,这样可以减少一些代码维护和增加程序稳健性能

Barenboim commented 1 year ago

自定义协议不用封装socket的。你看看一下这个文档和实例: https://github.com/sogou/workflow/blob/master/docs/tutorial-10-user_defined_protocol.md https://github.com/sogou/workflow/tree/master/tutorial/tutorial-10-user_defined_protocol 因为srpc其实就是基于workflow的一组自定义协议。自己写自定义协议,只需要写一下序列化和反序列化函数,你可以看看。 不过,srpc的client我们也加上sockaddr的支持吧。

yongxiangzheng commented 1 year ago

好的,我看看,谢谢~

Barenboim commented 6 months ago

@yongxiangzheng 突然想起来,我们本来就支持Unix domain socket的srpc client。只需要利用一下workflow的upstream功能就可以了。添加一个upstream,让其包含一个server,地址是一个本地路径:

#include "workflow/UpstreamManager.h"

int main()
{
    UpstreamManager::upstream_create_round_robin("uds-host-name", false);
    UpstreamManager::upstream_add_server("uds-host-name", "/home/xxxxx/uds-service");

    struct RPCClientParams params = RPC_CLIENT_PARAMS_DEFAULT;
    params.host = "uds-host-name";
    Example::SRPCClient client(&params);
}

而server端直接用start(const struct sockaddr *addr, socklen_t addrlen);这个函数启动server,服务的地址在/home/xxxxx/uds-service就可以了。 非常抱歉一年多才想起来可以这么用。我们的http,redis这些协议的任务,也可以通过这个方式使用Unix domain socket。

Barenboim commented 6 months ago

Workflow项目里关于upstream的文档:https://github.com/sogou/workflow/blob/master/docs/about-service-governance.md