Как закрыть сокет и открыть его снова в 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.

Вернуться на верх