问题描述
我需要基于与websocket.org上的回显服务器相同的逻辑创建服务器。 区别在于服务器不会完全回显用户键入的内容,而是会返回随接收的字符串而变化的响应。
我已经寻找了一个多星期,但我只发现了n个仅说明客户端的示例,其中一些示例包括不应答wss://调用的服务器示例。 我发现的所有内容仅对呼叫http://192.168.1.1:3000或https://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);
});
});
这适用于我的测试。