服务器到服务器Websocket通信

时间:2020-07-10 16:07:44

标签: python websocket

这是体系结构拓扑:

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

  2. 我这边的Web服务器,用于接收和存储数据。

由于我是WebSockets的新手,我将上述配置解释为安装在Web服务器上的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数据包。

当我尝试在IoT服务器中设置终结点地址时,它拒绝接受ws://Myserver:80,而仅接受HTTP://Myserver:80。显然我的服务器上没有运行任何HTTP服务器,因此我猜测服务器拒绝了该连接。

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

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

欢迎任何想法。

1 个答案:

答案 0 :(得分:0)

这些是要求:

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

他们需要每分钟左右刷新一次数据。以我的拙见,websockets仅在实时上是必需的。

也就是说,我建议的解决方案是改用Message Broker。我认为它比直接处理websockets更容易,而且您不必一直在乎保持实时套接字连接(就物联网世界而言,这并不高效)。

换句话说,请使用 Pub / Sub 体系结构。您的IoT设备将数据发布到Message Broker(通常是RabbitMQ),然后构建服务器订阅到代理,使用它的数据并将其存储。 / p>

现在,每个设备仅在有可用数据时才连接到云,这样可以节省能源。该协议可以是MQTT或HTTP,MQTT在IoT世界中经常使用。

相关:Pub-sub messaging benefits