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

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

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

    早上发了帖:
    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
        1
    qw7692336   2015-10-15 00:58:23 +08:00
        2
    halfcrazy   2015-10-15 01:02:31 +08:00
    http
    thrift
    protobuf
        3
    qw7692336   2015-10-15 01:30:46 +08:00
    @halfcrazy
    没有外网地址,不可能 HTTP
        4
    halfcrazy   2015-10-15 01:46:46 +08:00
    @qw7692336 不是任意两台内网设备间么?不需要外网 ip 啊
        5
    qw7692336   2015-10-15 01:52:38 +08:00
    @halfcrazy
    通过服务器来管理设备
        6
    qw7692336   2015-10-15 01:53:11 +08:00
    @halfcrazy
    没有外网地址怎么用 HTTP
        7
    qw7692336   2015-10-15 01:53:37 +08:00
    @halfcrazy
    不同的两个内网
        8
    qinix   2015-10-15 04:39:19 +08:00 via iPhone
    如果 http 不行,那么应该可以推知没有协议可以做到

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

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

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

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

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