使用WebSocket扩展Flask REST API

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用WebSocket扩展Flask REST API相关的知识,希望对你有一定的参考价值。

我目前正在扩展我现有的使用带有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(网关)。我的...中的“事物”

答案

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

以上是关于使用WebSocket扩展Flask REST API的主要内容,如果未能解决你的问题,请参考以下文章

python 通过 asyncio 同时使用 flask (quart)与 websocket

flask python geventwebsocket实现websocket

flask-websocket(1)

学习 Flask 扩展 Flask-RESTful

flask使用websocket

intra python flask服务器REST调用[复制]