【问题标题】:Server to Server Websocket communication服务器到服务器 Websocket 通信
【发布时间】:2020-07-10 16:07:44
【问题描述】:

这是架构拓扑:

  1. 一种物联网设备,用于统计人数并将数据保存到其云平台。数据可以通过 API 访问,更具体地说,它需要提供一个网络服务器端点,它可以每分钟左右推送数据。这是一个现成的产品,我无法更改数据传输方式。

  2. 我这边的网络服务器接收和存储数据。

由于我是 WebSockets 新手,我将上述配置解释为安装在我的网络服务器上的 WebSocket 服务器,并等待从 IoT 服务器(客户端)接收数据。

所以我在 digitalocean 中部署了一个 Linux 服务器,并启用了 websocket 服务器来等待传入的连接。我用于服务器的代码是:


import asyncio
import websockets

async def echo(websocket, path):
        async for message in websocket:
                print(message)

start_server = websockets.serve(echo, "MYSERVERIP", 80)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

在这个阶段我只需要打印从 IoT 服务器推送的所有 JSON 数据包。

当我尝试在物联网服务器中设置端点地址时,它拒绝接受ws://Myserver:80,只接受HTTP://Myserver:80。显然我的服务器上没有运行任何 HTTP 服务器,因此我猜测我的服务器拒绝连接。

此外,IoT API 需要令牌 X-Auth-token 身份验证。我正在使用 WebSockets python 库,但我没有在我的服务器上设置身份验证。我在物联网服务器 API 和我的服务器上都将其保留为空。 如果我要添加令牌身份验证,websocket 服务器需要什么参数或参数?我尝试搜索 websockets 文档,但没有成功。

这不适用于生产环境!!我只是想学习。

欢迎提出任何想法。

【问题讨论】:

    标签: python websocket


    【解决方案1】:

    所以这些是要求:

    1. 一种物联网设备,用于统计人数并将数据保存到云中 平台。可以通过 API 访问数据,更具体地讲 需要提供一个可以推送数据的网络服务器端点 每分钟左右。
    2. 我这边的网络服务器接收和存储 数据。

    他们需要每分钟左右刷新一次数据。在我看来,websockets 只是实时的。

    也就是说,我建议的解决方案是改用 Message Broker。我认为它比直接使用 websockets 更容易处理,而且您不必一直关心维护实时套接字连接(这在物联网世界中的能源效率不高)。

    换言之,请改用 Pub/Sub 架构。您的 IoT 设备将数据发布到消息代理(常见的是 RabbitMQ),然后您构建一个服务器订阅代理,使用并存储它的数据。

    现在,每台设备只有在有可用数据时才连接到云端,这样可以节省能源。协议可能是 MQTT 或 HTTP,MQTT 常用于 IoT 世界。

    相关:Pub-sub messaging benefits

    【讨论】:

    • 我完全同意你关于 MQTT 和 Pub/Sub 的看法,但是我没有更改物联网系统架构的选项。它只为数据传输提供 WebSocket 通信,因此我必须在我这边构建一个 WebSocket。感谢您的评论想法。
    猜你喜欢
    • 2014-03-18
    • 2016-04-19
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2016-05-20
    相关资源
    最近更新 更多