Angular5 + SocketIO для увеличения :: Beast - PullRequest
0 голосов
/ 28 апреля 2018

Так что я использую здесь учебник для настройки моего соединения socket.io с помощью Angular 5.x

https://blog.codewithdan.com/2017/11/07/pushing-real-time-data-to-an-angular-service-using-web-sockets/

Есть два сценария, и я не уверен, почему один работает, а другой нет, поэтому я надеюсь, что кто-то может помочь.

Сценарий сбоя

1) Запустите мой WS-сервер с помощью библиотеки Boost :: Beast CPP на IP-адресе сервера 10.1.1.1, используя плагин chrome «Простой клиент WebSocket». Я подключаюсь к IP-адресу моего сервера, он подключается через HTTP-обработчик Beast, см. это как запрос на обновление Websocket, порождает мой сеанс websocket, работает и подключается, как и ожидалось. Я изменяю свой HTTP-запрос, чтобы установить ALLOW-ACCESS-CONTROL-ORIGIN и другие флаги для решения проблем CORS, блокирующих мой Angular-клиент, в настоящее время я просто заставил его разрешить http://localhost:4200,, хотя я планировал изменить его на эхо обратно IP клиента, не уверен, если это является частью проблемы, которую я честно имею.

В случае, если это имеет значение, вот пункты запроса, которые я добавляю

res.insert(boost::beast::http::field::access_control_allow_origin, "http://localhost:4200");
res.insert(boost::beast::http::field::access_control_allow_methods, "GET, POST, OPTIONS, PUT, PATCH, DELETE");
res.insert(boost::beast::http::field::access_control_allow_headers, "X-Requested-With,content-type");
res.insert(boost::beast::http::field::access_control_allow_headers, "X-Requested-With,content-type");

Вот ответ / запрос / общее на случай сбоя

https://imgur.com/a/ZqyC1iz

Рабочий сценарий

1) Запустите мой WS-сервер с помощью библиотеки Boost :: Beast CPP на сервере. Использование Socket.Io для Angular5. Это в основном пустой проект angular-cli и в компоненте приложения я делаю

this.socket = socketIo('10.1.1.1:8087'). 

Хотя я также попробовал следующее после рассмотрения некоторых других проблем, с которыми люди пытались заставить SocketIO просто перейти прямо в режим websocket и не выполнять другие http-транзакции.

this.socket = socketIo({transports: ['websocket'], upgrade: false}, '10.1.1.1:8087');

Результаты не совпадают с рабочим случаем, запрос, кажется, тот же, но он никогда не вызывает мой код запроса на обновление websocket в Beast, и, насколько я могу судить, соединение никогда не устанавливается.

Вот запрос / ответ / общее на случай сбоя https://imgur.com/a/qiTfFAo

Опять же я чувствую, что это как-то связано с тем, что плагин Chrome подключается напрямую к IP-адресу сервера, где при подключении через мой угловой проект отправляет Localhost: 4200 в качестве источника, а не фактический IP-адрес клиентских машин?

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 28 апреля 2018

В обоих случаях похоже, что Beast отправляет обратно успешный код состояния (101 протокол переключения). Но в случае сбоя источник, заявленный клиентом, не соответствует списку разрешенных источников в поле ответа «Access-Control-Allow-Origin». Может ли это быть проблемой? Кроме того, у вас есть две записи для «Access-Control-Allow-Headers» с одинаковым значением, это предназначено?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...