C ++ uWebSockets服务器可以与JavaScript客户端通信吗?

时间:2018-10-02 04:27:32

标签: javascript c++ websocket

对于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 :(得分:0)

回答标题:是的。套接字是通过指定的端口和地址发送和接收数据的结构。它们独立于编程语言

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

我不知道该链接是否全部被掩盖,但是在初始化套接字后,您仍然需要一侧监听(这是您在服务器上所做的),而另一侧则是发送信息。

这是一种优雅的说法,因为您没有连接,所以没有连接。一切都如预期。

好好学习!

关于该问题的另一个主题: Socket-based communication is independent of a programming language used for implementing it. How is it possible?

答案 1 :(得分:0)

找到答案!

hub.listen("0.0.0.0", 13049)

我意识到我只能使用localhost连接到服务器,而我只是不明白为什么。浏览其他WebSocket文章后,我发现了问题。这是因为,默认情况下,服务器仅尝试接受来自localhost的连接。我不知道为什么会这样,但是您必须手动告诉它您想听每个人。

为此,我将放置hub.listen(13049)而不是仅接受本地主机的hub.listen("0.0.0.0", 13049)。 “ 0.0.0.0”是说“任何地址”的一种方式。这样可以解决问题,并允许我从任何WebSocket正常连接。