我在浏览器上打开了server.js和地址:http://localhost:8081。但随后在网站的左上方出现了“需要升级”的文字。 这是什么问题?我还需要升级什么?
这是server.js:
var serialport = require('serialport');
var WebSocketServer = require('ws').Server;
var SERVER_PORT = 8081;
var wss = new WebSocketServer({
port: SERVER_PORT
});
var connections = new Array;
SerialPort = serialport.SerialPort,
portName = process.argv[2],
serialOptions = {
baudRate: 9600,
parser: serialport.parsers.readline('\n')
};
if (typeof portName === "undefined") {
console.log("You need to specify the serial port when you launch this script, like so:\n");
console.log(" node wsServer.js <portname>");
console.log("\n Fill in the name of your serial port in place of <portname> \n");
process.exit(1);
}
var myPort = new SerialPort(portName, serialOptions);
myPort.on('open', showPortOpen);
myPort.on('data', sendSerialData);
myPort.on('close', showPortClose);
myPort.on('error', showError);
function showPortOpen() {
console.log('port open. Data rate: ' + myPort.options.baudRate);
}
function sendSerialData(data) {
if (connections.length > 0) {
broadcast(data);
}
}
function showPortClose() {
console.log('port closed.');
}
function showError(error) {
console.log('Serial port error: ' + error);
}
function sendToSerial(data) {
console.log("sending to serial: " + data);
myPort.write(data);
}
wss.on('connection', handleConnection);
function handleConnection(client) {
console.log("New Connection");
connections.push(client);
client.on('message', sendToSerial);
client.on('close', function () {
console.log("connection closed");
var position = connections.indexOf(client);
connections.splice(position, 1);
});
}
function broadcast(data) {
for (c in connections) {
connections[c].send(data);
}
}
答案 0 :(得分:1)
好的,websockets ......
“需要升级”状态标志着websocket握手的开始。通常,您的客户端首先将其发送到WS服务器。服务器以非常类似的方式回答(详情请参阅https://tools.ietf.org/html/rfc6455),然后继续管道实际数据。
在这里,您从客户端打开连接作为常规http,发送一个简单的GET。你在屏幕上看到的是服务器愚蠢地继续进行已经损坏的握手。
这不是您打开WS客户端连接的方式。您通常不会从浏览器打开WS页面。它应该通过JavaScript调用打开,例如new WebSocket(uri)
。所以你想要的是另一个端口上的常规http服务器,它提供一个包含必要的Javascript的页面来打开实际的WS连接并对其数据做一些有用的事情。你会在这里找到一个干净的例子:http://www.websocket.org/echo.html