Может ли сервер C ++ uWebSockets взаимодействовать с клиентом JavaScript? - PullRequest
0 голосов
/ 02 октября 2018

Есть несколько вещей, которые я не понимаю в uWebSockets , но в основном uWebSockets работает с обычными WebSockets или просто заимствует имя?Я несколько дней чесал голову и понятия не имею, делаю ли я что-то не так или просто тупой.

Я сделал минимальный сервер на C ++, который, насколько я могу судить, запускается правильно -

#include <iostream>
#include <uWS\uWS.h>

int main() {
    uWS::Hub hub;

    hub.onConnection([](uWS::WebSocket<uWS::SERVER> *ws, uWS::HttpRequest req) {
            std::cout << "A client connected" << std::endl;
        }
    );

    if (hub.listen(13049)) {
        std::cout << "Listening on port 13049" << std::endl;
        hub.run();
    }
}

Вместе с базовым клиентом JavaScript -

var ws = new WebSocket("ws://127.0.0.1:13049");

ws.onopen = function(event) {
    console.log("Connected");
};

Итак, мой вопрос.Почему это не соединяется?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Нашел ответ!

hub.listen("0.0.0.0", 13049)

Я понял, что могу подключиться к серверу только с localhost и просто не могу понять почему.Посмотрев на некоторые другие статьи WebSocket, я обнаружил проблему.Это потому, что по умолчанию сервер пытается принять соединение только с localhost.Я не знаю, почему это так, но вы должны вручную сказать ему, что вы хотите слушать всех.

Для этого вместо просто hub.listen(13049), который будет принимать только localhost, япоставил бы hub.listen("0.0.0.0", 13049).«0.0.0.0» - это способ сказать «любой адрес».Это решает проблему и позволяет мне нормально подключаться с любого WebSocket.

0 голосов
/ 02 октября 2018

Отвечая на заголовок: Да.Сокеты - это структуры для отправки и получения данных через указанные порты и адреса.Они не зависят от языка программирования .

https://www.tutorialspoint.com/html5/html5_websocket.htm

Я не знаю, закрыла ли эта ссылка все, но после инициализации сокета вы все равнонужно указать одну сторону для прослушивания (эту вы сделали на сервере), а другую - отправить информация.

Это элегантный способ сказать, что вы не подключаетесь, потому что вы не сделалине соединяюВсе как и ожидалось.

Хорошее изучение!

Еще одна тема по этому вопросу: Коммуникация на основе сокетов не зависит от языка программирования, используемого для его реализации.Как это возможно?

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