如何编写代码以模拟与Websocket.org中的回显服务器相同的代码

问题描述

我需要基于与websocket.org上的回显服务器相同的逻辑创建服务器。 区别在于服务器不会完全回显用户键入的内容,而是会返回随接收的字符串而变化的响应。

我已经寻找了一个多星期,但我只发现了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的回显服务器的代码

上面我列出了我在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调用服务器,则此代码会响应“这不是websocket !!!返回”:3000 /

谢谢。

解决方法

一段时间后,我找到了解决方法:

//  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);
    });
});

这适用于我的测试。