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

2023-02-12 02:04:39 +08:00
 jeesk

现在有个需求是两个手机实现通信, 有一台手机是 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 请求呢?

1399 次点击
所在节点    程序员
3 条回复
documentzhangx66
2023-02-12 02:45:58 +08:00
grpc + protocol buffer 了解一下。
jeesk
2023-02-12 02:48:56 +08:00
该问题已经解决。 刚才翻了一下 okhttp 和 HttpUrlconnetion 的源码,基本上都可以使用自定义的 socketFactoy 实现自定义的 socket 处理。
jeesk
2023-02-12 02:49:52 +08:00
@documentzhangx66 哈哈, grpc 就是 rpc 了,我不想要太多第三方的东西,过于复杂,而且出了问题难以调试。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/915283

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX