以下是架构拓扑:
-
一种物联网设备,可对人员进行计数并将数据保存到其云平台。数据可以通过API访问,更具体地说,它需要提供一个Web服务器端点,在那里它可以每分钟左右推送数据。这是一个现成的产品,我无法更改数据传输方法。
-
我这边的一个Web服务器,它接收并存储数据。
由于我是WebSocket的新手,我将上述配置解释为安装在我的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服务器,因此我猜我的服务器拒绝了连接。
此外,物联网API需要令牌X-Auth-to-ken身份验证。我正在使用WebSockets python库,但我没有在服务器上设置身份验证。我在物联网服务器API和我的服务器上都将其保留为空。如果我要添加令牌身份验证,那么websocket服务器需要什么参数或自变量?我试着搜索websockets文档,但没有成功。
这不适用于生产环境!!我只是想学习。
欢迎有任何想法。
因此这些是要求:
- 一种物联网设备,可对人员进行计数并将数据保存到云端站台数据可以通过API访问,更具体的是需要提供一个可以推送数据的Web服务器端点每分钟左右
- 我这边的一个接收和存储的Web服务器数据
他们需要每分钟左右刷新一次数据。在我看来,websocket只是实时的。
也就是说,我提出的解决方案是使用消息代理。我认为它比直接处理websocket更容易,而且你不必一直关心保持带电的套接字连接(在物联网世界中,这在能源方面并不高效(。
换句话说,请改用Pub/Sub体系结构。您的物联网设备将数据发布到Message Broker(常见的是RabbitMQ(,然后您构建一个服务器,订阅到Broker,消耗其数据并存储它。
现在,每个设备只有在有可用数据的情况下才能连接到云,这节省了能源。协议可以是MQTT或HTTP,MQTT在物联网世界中经常使用。
相关:Pub子消息传递有利于