如何编写代码来模拟与 Websocket.org 的 echo 服务器相同的代码

问题描述 投票:0回答:1

我需要创建一个基于与 websocket.org 上的 echo 服务器相同逻辑的服务器。 不同之处在于,服务器不会准确回显用户输入的内容,而是会返回随接收到的字符串而变化的响应。

我找了一个多星期,只找到了n个仅解释客户端的例子,其中一些包括不应答wss://调用的服务器的例子。 我发现的所有内容仅响应调用 http://192.168.1.1:3000https://192.168.1.1:3000,但是当我使用 wss: //192.168.1.1:3000 时,Firefox 说,它是无法与wss服务器建立连接://192.168.1.1:3000/。 当我调用 wss 时客户端工作://echo.websocket.org/.

在哪里可以找到响应 wss 的 echo 服务器的代码?

上面我列出了我在github上找到的代码。我正在尝试的nodejs服务器代码是:

const http = require('http');
const ws = require('ws');

const wss = new ws.Server({noServer: true});

console.log("Script has started");

if (!module.parent) {
    console.log("Listening on port 3000");
    http.createServer(accept).listen(3000);
} else {
    exports.accept = accept;
}


function accept(req, res) {
    console.log("accept event started");
    // all incoming requests must be websockets
    if (!req.headers.upgrade || req.headers.upgrade.toLowerCase() != 'websocket') {
        console.log("This is no websocket!!! Return");
            res.end();
            return;
    }

    // can be Connection: keep-alive, Upgrade
    if (!req.headers.connection.match(/\bupgrade\b/i)) {
        res.end();
        return;
    }
    console.log("Handle upgrade");
    wss.handleUpgrade(req, req.socket, Buffer.alloc(0), onConnect);
}

function onConnect(ws) {
    console.log("onConnect event started");
    ws.on('message', function (message) {
        let name = message.match(/([\p{Alpha}\p{M}\p{Nd}\p{Pc}\p{Join_C}]+)$/gu) || "Guest";
        console.log("Send Hello");
        ws.send(`Hello from server, ${name}!`);

        setTimeout(() => ws.close(1000, "Bye!"), 5000);
    });
}

如果我使用 http://192.168.1.1: 3000/

调用服务器,此代码会响应“这不是 websocket!!!返回”

提前谢谢您。

node.js websocket socket.io echo
1个回答
4
投票

过了一会儿我找到了解决方案:

//  Basic Websocket (ws) echo server
const WebSocket = require('ws');

const ws_server = new WebSocket.Server({ port: 81 });

ws_server.on('connection', function connection(ws) {
    console.log("A client connected");
    ws.on('message', function incoming(message) {
        ws.send('Hi, you sent me ' + message);
    });
});

这适用于我的测试。

© www.soinside.com 2019 - 2024. All rights reserved.