6
私は、ログファイルを提供するためにbottle.pyでgevent-websocketを使用しています。 WebSocket接続がクライアント側からクローズされたことを検出するにはどうすればよいですか?Gevent-Websocketクローズド接続の検出
return sock.send(data, flags)
error: [Errno 32] Broken pipe
しかし、私は、クライアントがWebSocketの接続を閉じた場合は、正しく、サーバー上で検出したい:私は壊れたパイプのエラーを取得するまで、私は書いている時点では
。私のコードまたは溶液への任意の他の改善は歓迎されている
jQuery(document).ready(function(){
ws = $.gracefulWebSocket("ws://" + document.location.host + "/websocket" + document.location.pathname);
ws.onmessage = function (msg) {
var message = JSON.parse(msg.data);
$("#log").append(message.output + "<br>");
};
window.onbeforeunload = function() {
ws.onclose = function() {console.log('unlodad')};
ws.close()
};
});
:
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
import gevent.monkey
gevent.monkey.patch_all()
from bottle import route, Bottle, view, request, static_file
import json
import os
import time
app = Bottle()
# Other code
@app.route('/websocket/<filename>')
def ws_logfile(filename):
if request.environ.get('wsgi.websocket'):
ws = request.environ['wsgi.websocket']
try:
filename = os.path.join(os.getcwd(), "logfiles", filename)
logfile = file(filename)
lines = logfile.readlines()
for line in lines:
ws.send(json.dumps({'output': line}))
while True:
line = logfile.readline()
if line:
# Here detect if connection is closed
# form client then break out of the while loop
ws.send(json.dumps({'output': line}))
else:
time.sleep(1)
ws.close()
except geventwebsocket.WebSocketError, ex:
print "connection closed"
print '%s: %s' % (ex.__class__.__name__, ex)
if __name__ == '__main__':
http_server = WSGIServer(('127.0.0.1', 8000), app, handler_class=WebSocketHandler)
http_server.serve_forever()
と、対応するクライアントのjavascriptコード:
私のコードは次のようになります。
許諾よりも許してほしいと思う方がいいです。まだ競争状態があります。 – warvariuc