Требуется подключение javascript websocket к уже существующему HTTP-серверу python3 - PullRequest
0 голосов
/ 05 августа 2020

В настоящее время у меня python3 socketserver.TCPServer работает на моем Linux хост-компьютере. Теперь мне нужен поток данных, к которому будет подключаться клиент JS, и затем сервер сможет передавать ему новые данные для заполнения полей HTML. Я одолжил немного JS для обработки WebSocket, но у меня проблемы со стороной python3.

Когда я запускаю веб-клиент, мой класс HTTPAuthHandler просто обрабатывает мое входящее соединение с сокетом как запрос GET. Немного застрял в том, где отсюда до go. Моя цель - поддерживать соединение открытым и sh данные, когда это необходимо с сервера.

Как мне обрабатывать входящее соединение через сокет?

Python3 do_GET:

def do_GET(self):
        """Present frontpage with user authentication."""
        auth_header = self.headers.get('Authorization', '').encode('ascii')
        if auth_header is None:
            self.do_authhead()
            self.wfile.write(b"no auth header received")
        elif auth_header == self.valid_header:
            SimpleHTTPRequestHandler.do_GET(self)
        else:
            self.do_authhead()
            self.wfile.write(auth_header)
            self.wfile.write(b"not authenticated")

Javascript socketclient:

let socket = new WebSocket("ws://" + window.location.host + "/device-info");

socket.onopen = function(e) {
    alert("[open] Connection established");
    alert("Sending to server");
    socket.send("My name is John");
  };
  
  socket.onmessage = function(event) {
    alert(`[message] Data received from server: ${event.data}`);
  };
  
  socket.onclose = function(event) {
    if (event.wasClean) {
      alert(`[close] Connection closed cleanly, code=${event.code} reason=${event.reason}`);
    } else {
      // e.g. server process killed or network down
      // event.code is usually 1006 in this case
      alert('[close] Connection died');
    }
  };
  
  socket.onerror = function(error) {
    alert(`[error] ${error.message}`);
  };

Вывод:

192.168.0.199 - - [05/Aug/2020 16:53:28] code 404, message File not found
192.168.0.199 - - [05/Aug/2020 16:53:28] "GET /device-info HTTP/1.1" 404 -
...