我是網絡套接字的新手。我爲我的後端使用了tornado/python,並編寫了下面的代碼。使用Web套接字和龍捲風從後端通知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我想要一個更好的解決方案,以便我不需要每100毫秒就發送一次send()到服務器。 –
那麼,你有什麼嘗試,我們會幫你解決一些不起作用的東西,但不太可能爲你寫所有的東西? – hardillb