无法使用node.js连接localhost:8081

时间:2016-04-19 11:08:39

标签: javascript node.js

我在浏览器上打开了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);
    }
}

1 个答案:

答案 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