Как закрыть сокет и открыть его снова в tornado
У меня есть торнадо websocket
class WSHandler(tornado.websocket.WebSocketHandler):
def open(self):
print ('new connection')
global hr_values_list
hr_values_list=[]
def on_message(self, message):
value=getvalue(message)
if value:
self.write_message(json_encode(int(value)))
hr_values_list.append(value)
def on_close(self):
avg=int(np.mean(hr_values_list))
print ('connection closed',len(hr_values_list),avg)
def check_origin(self, origin):
return True
application = tornado.web.Application([
(r'/websocket', WSHandler),
])
Сначала я хочу записывать значение в консоль браузера или на страницу, когда выполняется действие on_close. Например, есть ли способ write_message
как в функции on_message
.
Во-вторых, я хочу снова открыть соединение после того, как оно было закрыто
function defsocket() {
var socket = new WebSocket('ws://localhost:8888/websocket');
return socket;
};
socket = defsocket();
$(document).ready(function() {
let video = document.getElementById('video');
let canvas = document.getElementById('canvas');
let context = canvas.getContext('2d');
let draw_canvas = document.getElementById('detect-data');
let draw_context = draw_canvas.getContext('2d');
let image = new Image();
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia({
video: true
}).then(function(stream) {
video.srcObject = stream;
video.play();
});
}
function drawCanvas() {
context.drawImage(video, 0, 0, 500, 350);
sendMessage(canvas.toDataURL('image/png'));
}
document.getElementById("start-stream").addEventListener("click", function() {
drawCanvas();
});
document.getElementById("stop-stream").addEventListener("click", function() {
socketClose();
});
function sendMessage(message) {
socket.send(message);
}
function socketClose() {
socket.close();
}
socket.onmessage = function(e) {
console.log(e)
document.getElementById("pid").innerHTML = e.data;
drawCanvas();
};
})
Итак, я хочу, чтобы при нажатии на start-stream начиналось соединение и значение отображалось на html-странице. Это работает. Далее я хочу, чтобы при нажатии на кнопку stop-stream среднее значение этих значений, которые я храню в списке hr_values_list
, отображалось на html-странице или в консоли браузера. Но я не знаю, как вернуть это значение. Наконец, я хочу, чтобы при нажатии на start-stream после stop-stream поток запускался снова.
Но он говорит WebSocket is already in CLOSING or CLOSED state.