一个应用同时支持 Socket 和 Web Socket

Hi, forks

最近在捣鼓一个东西,大概的需求是这样的:

整个玩意分为 3 个部分,分别是底层机械的控制、中间层一个服务器、顶层应用层一个操作界面。

现在希望做到的效果就是能在应用层上面发出控制指令给服务器,然后对底层机械进行控制;而底层机械部分也会实时发送状态到应用层并显示出来。

所以我暂时就想到在底层机械和应用层之间增加一个服务器做中间人(因为应用端会有多个,而且需要做一些数据持久化)。然后又因为两者是要做到实时响应的,所以考虑是:

但我不知道怎么能够做到把这两个类型的 socket 桥接起来进行通信比较方便。或者存在更好的模式?

P.S. 底层那块性能其实是很渣的,类似单片机的级别;而中间那块是树莓派的级别


BTW, 其实我之前做过一个类似的三层模型(其实就和那种发 weibo 关电灯的差不多),底层是一个 arm,然后采取了轮询中间层的一个任务队列;然后中间层提供了一套接口分别给不同的顶层应用用(weibo 机器人 和 web 服务)。但我后来发觉这种做法其实在部署上和底层性能上都不太好的……

然后后来看到 hubot 是直接在一个进程里面同时启动了 HTTP 和 socket (或者其他堵塞行为的操作),也在想过 python 里面可不可以实现(例如用协程或者其他 async 的方法?)(当然我上面说到的应用可能会用 golang ……)

所以也希望能科普一下相关的知识!谢谢各位!


再 BTW,回复和发帖之间的间隔太长啦 @lepture


又写了一个能玩的版本。一个端口发过来的信息会广播到不同端口的所有客户端上~ 感觉用 golang 的 channel 就能解决我想要做的事情了。

不过要考虑的东西就是 golang 在 ARM 的移植问题了 QAQ

4 comments