V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
qw7692336
V2EX  ›  问与答

任意两台内网设备间的 RPC 通讯用什么技术方案?

  •  
  •   qw7692336 · 2015-10-15 00:58:09 +08:00 · 3162 次点击
    这是一个创建于 3330 天前的主题,其中的信息可能已经有所发展或是发生改变。

    早上发了帖:
    http://www.v2ex.com/t/227726
    问的是实时通讯的解决方案,推送的那块,用发布 /订阅模式。

    现在想要一种请求 /响应的模式,作手机远程操作嵌入式设备。
    手机跟嵌入式设备都在内网,都有会唯一的 ID 。

    第 1 条附言  ·  2015-10-15 01:54:07 +08:00
    手机和嵌入式设备在不同的两个内网。
    比如在家控制公司的设备。
    第 2 条附言  ·  2015-10-15 09:45:44 +08:00
    我有一个服务端,连接这不同的客户端,而各个客户端之间,通过服务端的帮助来互相通讯,用请求 /响应的方式通讯
    第 3 条附言  ·  2015-10-15 12:15:59 +08:00
    更清晰的描述应该是 P2P 的 RPC
    22 条回复    2015-10-15 23:20:47 +08:00
    qw7692336
        1
    qw7692336  
    OP
       2015-10-15 00:58:23 +08:00
    halfcrazy
        2
    halfcrazy  
       2015-10-15 01:02:31 +08:00
    http
    thrift
    protobuf
    qw7692336
        3
    qw7692336  
    OP
       2015-10-15 01:30:46 +08:00
    @halfcrazy
    没有外网地址,不可能 HTTP
    halfcrazy
        4
    halfcrazy  
       2015-10-15 01:46:46 +08:00
    @qw7692336 不是任意两台内网设备间么?不需要外网 ip 啊
    qw7692336
        5
    qw7692336  
    OP
       2015-10-15 01:52:38 +08:00
    @halfcrazy
    通过服务器来管理设备
    qw7692336
        6
    qw7692336  
    OP
       2015-10-15 01:53:11 +08:00
    @halfcrazy
    没有外网地址怎么用 HTTP
    qw7692336
        7
    qw7692336  
    OP
       2015-10-15 01:53:37 +08:00
    @halfcrazy
    不同的两个内网
    qinix
        8
    qinix  
       2015-10-15 04:39:19 +08:00 via iPhone
    如果 http 不行,那么应该可以推知没有协议可以做到

    并不能懂 http 跟有没有外网地址有什么关系
    ryd994
        9
    ryd994  
       2015-10-15 05:24:09 +08:00
    两个都是内网,要么外网服务器转发,要么外网服务器协助打洞。没有外网机器就完全没戏。
    ljbha007
        10
    ljbha007  
       2015-10-15 07:28:16 +08:00
    STUN/TURN/ICE 协议是专门 用来给两台 nat 后的设备建立连接打洞用的
    通信协议 一般的 RPC 协议都可以 xml-rpc/json-rpc
    甚至自己用“发布 /订阅”模式的消息队列服务器来实现都可以 用消息队列的好处是 连打洞都可以省了 直接通过服务器来通信
    shangjiyu
        11
    shangjiyu  
       2015-10-15 07:53:59 +08:00 via Android
    N2N?
    line
        12
    line  
       2015-10-15 07:54:31 +08:00 via Android
    RPC 好像只能 client 调用 Server 单向的。双向无解。
    qw7692336
        13
    qw7692336  
    OP
       2015-10-15 09:30:07 +08:00
    @ryd994
    可以转发,可以打洞。关键是有没有现成的这种协议,对已有的设备进行管理,给每个设备分配一个 ID 号,方便设备之间的通讯,就如 VOIP 打电话协议,发 email 协议一样,都是 client to client 的,只不过我想要请求 /响应的方式而已。

    @ljbha007 发布 /订阅是单项的,我需要主动发起请求,向对方获取数据。
    @line
    line
        14
    line  
       2015-10-15 09:38:44 +08:00
    @qw7692336 就是要双向 RPC 吧,好像没有好方法
    qw7692336
        15
    qw7692336  
    OP
       2015-10-15 09:45:11 +08:00
    @line
    我有一个服务端,连接这不同的客户端,而各个客户端之间,通过服务端的帮助来互相通讯,用请求 /响应的方式通讯
    line
        16
    line  
       2015-10-15 10:10:27 +08:00 via Android
    @qw7692336 IM ?
    qw7692336
        17
    qw7692336  
    OP
       2015-10-15 10:12:30 +08:00
    @line
    IM 也不是请求 /响应的
    line
        18
    line  
       2015-10-15 11:24:52 +08:00
    @qw7692336 clients 间能交换数据不就可以做成 请求 响应 了吗?
    mulog
        19
    mulog  
       2015-10-15 11:33:51 +08:00
    我有一个服务端,连接这不同的客户端,而各个客户端之间,通过服务端的帮助来互相通讯,用请求 /响应的方式通讯

    这不就是 IM 吗。。。
    没懂 「 IM 也不是请求 /响应的」是什么意思
    qw7692336
        20
    qw7692336  
    OP
       2015-10-15 12:15:28 +08:00
    @mulog
    像 HTTP 那样,客户端 A 向客户端 B 发送请求,发送完毕后, A 会一直等待 B 响应数据,直到 B 把数据返回完毕。
    mengzhuo
        21
    mengzhuo  
       2015-10-15 21:15:16 +08:00 via iPhone
    >>> 没有外网地址就不能用 http
    醉了 同学 你还是多看看书吧

    p2p 至少需要 stun 才能通讯
    为了管理方便稳定
    一般都是转发式的 协议怎么方便怎么来

    最后 还是那句话 多看看书
    qw7692336
        22
    qw7692336  
    OP
       2015-10-15 23:20:47 +08:00
    @mengzhuo
    难道设备不是需要监听固定的外网端口,才能够随时被外部访问吗?
    总之以设备 IP 地址来访问都是不可能的,只能够通过设备 ID 去访问。
    暂时无论是 P2P 还是服务器转发都可以, stun 这种这么底层的操作不想自己来实现,我想要一套现成的方案而已,像 XMPP 、 VOIP 、 Email 那样,把所有工作都做好,只需要找到对方的 ID 向对方发消息即可,把传输层的操作屏蔽掉。只不过我想要实现请求 /响应模式,想要一套把线程处理、 NAT 穿透等操作都办好的方案。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1054 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:22 · PVG 03:22 · LAX 11:22 · JFK 14:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.