【问题标题】:Can a C++ uWebSockets server communicate with a JavaScript client?C++ uWebSockets 服务器可以与 JavaScript 客户端通信吗?
【发布时间】:2019-03-07 04:59:31
【问题描述】:

关于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");
};

所以我的问题。这个怎么连不上?

【问题讨论】:

    标签: javascript c++ websocket


    【解决方案1】:

    找到答案了!

    hub.listen("0.0.0.0", 13049)

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

    为此,我将输入hub.listen("0.0.0.0", 13049) 而不是只接受本地主机的hub.listen(13049)。 “0.0.0.0”是一种表示“任何地址”的方式。这解决了问题并允许我从任何 WebSocket 正常连接。

    【讨论】:

      【解决方案2】:

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

      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?

      【讨论】:

      • 感谢您的输入,但是如果我没记错的话,WebSocket 构造函数确实会发送连接请求。我提供的代码应该可以工作。
      • 好的,这确实回答了我的部分问题,谢谢。现在我只需要弄清楚为什么我的代码不起作用。
      • 其实我刚刚取得了突破。将 127.0.0.1 更改为 localhost 似乎有所作为,客户端现在可以连接。关于为什么会这样的任何想法?
      猜你喜欢
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多