Как: запрос Websocket к серверу HTTP API с помощью websockify - PullRequest
0 голосов
/ 18 июня 2020

У меня есть HTTP-сервер API (возвращающий json данных) и клиент, который делает запросы через веб-сокеты, поэтому я решил go вместо websockify для связи между моим сервером и моим клиентом.

Но я не понимаю, как получить результат запроса веб-сокета.

Для тестирования у меня есть простой сервер hello world python API с Flask:

import flask
from flask import request, jsonify
app = flask.Flask(__name__)
app.config["DEBUG"] = True
result = {"HelloWorld" : 42}
@app.route('/', methods=['GET'])
def home():
    return jsonify(result)
app.run(host="0.0.0.0")

Протестировано в браузере, хорошо возвращается {"HelloWorld": 42}.

Я запускаю websockify, чтобы открыть новый порт, который взаимодействует с веб-сокетами, например: websockify --verbose 0.0.0.0:5001 0.0.0.0:5000.

И У меня есть клиент javascript, который пытается сделать такой запрос веб-сокета:

var socket = null;
socket = new WebSocket("ws://0.0.0.0:5001/");
socket.onerror = function(error) {
    console.error(error);
};
socket.onopen = function(event) {
    console.log("Connexion ok.");
    socket.send("GET / HTTP/1.1");
};
socket.onmessage = function(event) {
    console.log("Message: ", event.data);
};
socket.onclose = function(event) {
    console.log("Connexion ko.");
};

Но когда я пытаюсь выполнить этот скрипт, соединение закрывается сразу после соединения:

Connexion ok.
Connexion ko.

Кажется, что он закрывается, когда я пытаюсь отправить веб-сокет (socket.send("GET / HTTP/1.1");), потому что, если я прокомментирую эту строку, соединение сохраняется.

...