Rpcx (二):传输

简介: Rpcx (二):传输

一、Transport 传输

  rpcx 可以通过 TCP、HTTP、UnixDomain、QUIC和KCP通信。你也可以使用http客户端通过网关或者http调用来访问rpcx服务。

TCP

这是最常用的通信方式。高性能易上手。可以使用TLS加密TCP流量。

Example: 101basic

服务端使用 tcp 做为网络名并且在注册中心注册了名为 serviceName/tcp@ipaddress:port 的服务。

s.Serve("tcp", *addr)

客户端可以这样访问服务:

d := client.NewPeer2PeerDiscovery("tcp@"+*addr, "")
xclient := client.NewXClient("Arith", client.Failtry, client.RandomSelect, d, client.DefaultOption)
defer xclient.Close()

HTTP Connect

你可以发送 HTTP CONNECT 方法给 rpcx 服务器。 Rpcx 服务器会劫持这个连接然后将它作为TCP连接来使用。 需要注意,客户端和服务端并不使用http请求/响应模型来通信,他们仍然使用二进制协议。

网络名称是 http, 它注册的格式是 serviceName/http@ipaddress:port。

HTTP Connect并不被推荐。 TCP是第一选择。

如果你想使用http 请求/响应 模型来访问服务,你应该使用网关或者http_invoke。

Unixdomain

网络名称是 unix。

Example: unix

QUIC

网络名称是 quic。

Example: quic

KCP

KCP 是一个快速并且可靠的ARQ协议。

网络名称是 kcp。

当你使用kcp的时候,你必须设置Timeout,利用timeout保持连接的检测。因为kcp-go本身不提供keepalive/heartbeat的功能,当服务器宕机重启的时候,原有的连接没有任何异常,只会hang住,我们只能依靠Timeout避免hang住。

 Example: kcp

reuseport

网络名称是 reuseport。

Example: reuseport

它使用tcp协议并且在linux/uxix服务器上开启 SO_REUSEPORT socket 选项。

TLS

Example: TLS

你可以在服务端配置 TLS:

func main() {
    flag.Parse()

    cert, err := tls.LoadX509KeyPair("server.pem", "server.key")
    if err != nil {
        log.Print(err)
        return
    }

    config := &tls.Config{Certificates: []tls.Certificate{cert}}

    s := server.NewServer(server.WithTLSConfig(config))
    s.RegisterName("Arith", new(example.Arith), "")
    s.Serve("tcp", *addr)
}

你可以在客户端设置 TLS:

func main() {
    flag.Parse()

    d := client.NewPeer2PeerDiscovery("tcp@"+*addr, "")

    option := client.DefaultOption

    conf := &tls.Config{
        InsecureSkipVerify: true,
    }

    option.TLSConfig = conf

    xclient := client.NewXClient("Arith", client.Failtry, client.RandomSelect, d, option)
    defer xclient.Close()

    args := &example.Args{
        A: 10,
        B: 20,
    }

    reply := &example.Reply{}
    err := xclient.Call(context.Background(), "Mul", args, reply)
    if err != nil {
        log.Fatalf("failed to call: %v", err)
    }

    log.Printf("%d * %d = %d", args.A, args.B, reply.C)

}

注:官网地址:rpcx

例子均为官网示例

目录
相关文章
|
存储 Dragonfly 弹性计算
2023年阿里云服务器8核16G配置收费标准与活动价格参考,价格2849.76元1年起
一般来说企业用户在选择云服务器配置的时候,8核16G配置是选择比较多的,2023年新用户租用阿里云轻量应用服务器低至108元首年,8核16G配置目前活动价格仅需2849.76元1年起,不过阿里云不同实例类型的8核16G云服务器配置,产品价格也各不相同。而在平时购买和活动期间买价格也是不一样的。本文主要为大家介绍目前阿里云服务器8核16G配置收费标准与活动价格,以供参考。
904 0
2023年阿里云服务器8核16G配置收费标准与活动价格参考,价格2849.76元1年起
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
502 0
|
JSON 负载均衡 网络协议
Rpcx (一):详解【介绍、基础示例 demo】
Rpcx (一):详解【介绍、基础示例 demo】
359 2
|
JavaScript Java 测试技术
流浪动物救助微信小程序+springboot+vue.js附带文章和源代码设计说明文档ppt
流浪动物救助微信小程序+springboot+vue.js附带文章和源代码设计说明文档ppt
181 2
|
缓存 网络协议 物联网
UDP的可靠性传输
UDP的可靠性传输
422 1
|
数据挖掘 vr&ar
金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
|
存储 Oracle 关系型数据库
服务器数据恢复-LINUX下误删除/格式化的数据恢复方案
服务器数据恢复环境: 基于EXT2/EXT3/EXT4/Reiserfs/Xfs文件系统的Linux操作系统。 服务器故障: LINUX操作系统下误删除/格式化数据。
服务器数据恢复-LINUX下误删除/格式化的数据恢复方案
|
缓存 网络协议 网络性能优化
UDP的可靠传输/KCP是怎样练成的
UDP的可靠传输/KCP是怎样练成的
371 0
|
缓存 网络协议 算法
UDP的可靠传输
UDP的可靠传输
262 0
|
Shell 数据安全/隐私保护