使用WebSocket扩展Flask REST API

问题描述 投票:0回答:1

我目前正在扩展我现有的使用带有WebSocket支持的Flask-RESTPlus创建的REST API。这个想法是创建一个Web Thing Model兼容的Web Thing(网关)。用例中的“事物”是动态添加或删除的。

当前设置允许消费者从事物中获取最新值,例如温度传感器,使用对/ thingId / properties / temperature的HTTP GET请求。这些值实际上是从Kafka消耗的,并临时存储在Redis中。

现在,我想知道如何扩展此设置,并允许使用者不仅可以轮询最新值,还可以使用WebSockets订阅Thing的属性。我有一个可行的解决方案,其中为每个属性创建“房间”,但这需要两个单独的服务器和端点的重复。

对于REST我有

@app.route('/<thingId>/properties/<propertyId>')
    # get latest datapoint
    return latestDatapoint

对于Flask-SocketIO我有

@socketio.on('join')
def on_join(data):
    username = data['username']
    room = data['room'] # e.g. /thingId/properties/temperature
    join_room(room)
    send(username + ' has entered the room.', room=room)

然后,我将数据转发到从卡夫卡进来的正确房间。然后,在客户端,我需要连接到WebSocket服务器并加入会议室

socket.on('connection', function(socket){
  socket.emit('join', 'some room');
});

此实现有效,但我强烈希望找到一个替代的工作流程,如下图所示,其中客户端连接到REST API中使用的同一终结点,但使用WebSocket协议而不是加入会议室等。

您是否知道这是否已经存在或是否可以实施?

我目前正在扩展我现有的使用带有WebSocket支持的Flask-RESTPlus创建的REST API。这个想法是创建一个兼容Web Thing模型的Web Thing(网关)。我的...中的“事物”

flask flask-socketio flask-restplus
1个回答
0
投票

我有一个可行的解决方案,其中为每个属性创建“房间”,但这需要两个单独的服务器和端点的重复。

© www.soinside.com 2019 - 2024. All rights reserved.