V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jeesk
V2EX  ›  程序员

减少端口的占用,如何复用 socket ?

  •  
  •   jeesk · 2023-02-12 02:04:39 +08:00 · 1458 次点击
    这是一个创建于 642 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有个需求是两个手机实现通信, 有一台手机是 server ,有一台手机是 client 。这个时候 server 与 client 建立了一个 socket 连接,都有 socket 。

    手机 A 有个 map<手机编号,socket> 手机 B 也有 map<手机编号,socket>, 这个时候可以通过 socket write 和 read.

    假设双方不使用用 rpc 的方式调用,这里的假设,你非要做,那当我没说。 双方通过 http 接口的方式暴露, 因为要传文件,所以 rpc 并不适合,我也不想自定义协议去通信,太麻烦了。

    比如 A 手机有个接口,叫做退出。 地址是 localhost:8080/exit_app, 这个时候 B 要想复用存在的 socket, 如何非常快捷的构造一个 http 请求通过 socket 的方式 write 给手机 A?

    这里 B 手机其实并不能直接访问 localhost:8080/exit_app 这个接口, 不要问为什么,就是不能直接访问。只能通过建立的 socket 来通信,并且暂时不考虑 B 手机开启一个 serversocket 的方式,将流量通过 b 获取到的 socket 做转发。 问题就来了, 我要如何简单又快捷的通过 b 持有的 socket 去发送或者说构造一个 http 请求呢?

    3 条回复    2023-02-12 02:49:52 +08:00
    documentzhangx66
        1
    documentzhangx66  
       2023-02-12 02:45:58 +08:00
    grpc + protocol buffer 了解一下。
    jeesk
        2
    jeesk  
    OP
       2023-02-12 02:48:56 +08:00
    该问题已经解决。 刚才翻了一下 okhttp 和 HttpUrlconnetion 的源码,基本上都可以使用自定义的 socketFactoy 实现自定义的 socket 处理。
    jeesk
        3
    jeesk  
    OP
       2023-02-12 02:49:52 +08:00
    @documentzhangx66 哈哈, grpc 就是 rpc 了,我不想要太多第三方的东西,过于复杂,而且出了问题难以调试。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1040 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:14 · PVG 06:14 · LAX 14:14 · JFK 17:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.