В настоящее время я работаю над расширением моего существующего REST API, созданного с использованием Flask -RESTPlus с поддержкой WebSocket. Идея заключается в создании Web Thing Model совместимого Web Thing (шлюза). «Вещи» в моем сценарии использования динамически добавляются или удаляются.
Текущая настройка позволяет потребителю получать последние значения из Thing, например датчик температуры, используя HTTP-запрос GET к / thingId / свойства / температура . В действительности значения потребляются из Kafka и временно хранятся в Redis.
Теперь мне интересно, как я могу расширить эту настройку и позволить потребителю не только опрашивать последние значения, но и подписываться на свойство Thing используя WebSockets. У меня есть рабочее решение, в котором я создаю «Комнаты» для каждого свойства, но для этого требуются два отдельных сервера и дублирование конечных точек.
Для 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 вместо присоединения к комнатам и т. д. c. 
Есть ли у вас какие-либо идеи, если это уже существует или возможно осуществить?