Webソケットが新しくなっています。私はバックエンドに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ミリ秒のバックエンドに空白のWebソケットのリクエスト要求を作っています。これは私にとって非常に悪い解決策に思えます。バックエンドに複数のsend()を行い、メーターの読み取り値の変更だけをユーザーに通知することなく、これを行うより良い方法はありますか?
また、私はこれをより良い方法で行うためにMQTTプロトコルを使用しました。誰かがどのように実装することができますか?あなたは竜巻がwrite_message
メソッドを介してクライアントにpingを実行するためにいくつかのイベントを必要と気づくことができたよう
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()})
:
ここで何を求めているのかはっきりしません。そのコードをすべてMQTTに置き換えたいですか? – hardillb
@hardillb私は100ミリ秒ごとにサーバーにsend()を行う必要がないように、より良い解決策が必要です。 –
あなたはすでに何を試してみましたか、うまくいかないものを修正するのを手伝ってくれますが、それをすべてあなたのために書くつもりはありませんか? – hardillb