Я новичок в веб-сокетах. Я использую tornado/python для своего back-end и написал следующий код.Уведомление ping с бэкэнд с использованием веб-гнезд и торнадо
class BaseWebSocketHandler(websocket.WebSocketHandler):
"""Base Class to establish an websocket connection."""
def open(self):
"""Opening the web socket connection."""
self.write_message('Connection Established.')
def on_message(self, message):
"""On message module send the response."""
pass
def on_close(self):
"""Close the connection."""
self.write_message('bye')
class MeterInfo(BaseWebSocketHandler):
"""Establish an websocket connection and send meter readings."""
def on_message(self, message):
"""On message module send to the response."""
self.write_message({'A': get_meter_reading()})
Мой JavaScript-код, как ниже,
var meter = new WebSocket("ws://"+window.location.host+"/socket/meterstatus/");
meter.onopen = function() {
$('#meter-well').text('Establishing connection...');
};
meter.onmessage = function (evt) {
var data = JSON.parse(evt.data)
var text = "<div class='meter'><h2>" + data.A +"</h2></div>";
$('#meter-pre').html(text);
};
meter.onclose = function (evt) {
console.log(JSON.parse(evt.data))
$('#meter-pre').append('\n'+evt.data);
};
window.setInterval(function(){ meter.send('') }, 100);
Я делаю запрос пустой веб-сокетов запрос к фоновым каждые 100 миллисекунд. это кажется очень плохим решением для меня. Есть ли лучший способ сделать это, не делая несколько send() в фоновом режиме и только уведомляя пользователя только о любых изменениях в показаниях счетчика?
Также я прошел через протокол MQTT, чтобы сделать это лучше, может кто-то предложить, как я могу это реализовать?
Непонятно, что вы здесь просите, вы хотите заменить весь этот код на MQTT? – hardillb
@hardillb Я хочу лучшее решение, так что мне не нужно будет отправлять send() на сервер каждые 100 миллисекунд. –
Итак, что вы уже пробовали, мы поможем вам исправить что-то, что не работает, но вряд ли вам все это напишет? – hardillb