NodeJS中的Websockets。从服务器端WebSocket客户端调用WebSocketServer

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NodeJS中的Websockets。从服务器端WebSocket客户端调用WebSocketServer相关的知识,希望对你有一定的参考价值。

我正在运行NodeJS Web应用程序。我有一个运行的WebSocketServer。我可以通过客户端机器上的javascript制作的WebSocket连接与我的应用程序进行通信。这是相关的nodejs服务器端代码片段:

var WebSocket = require('ws');
var WebSocketServer = require('ws').Server;

var server = app.listen(process.env.VCAP_APP_PORT || 3000, function () {
    console.log('Server started on port: ' + server.address().port);
});

wss.on('connection', function (ws) {
    ws.on('message', function (message, flags) {
        if (flags.binary) {
            var value1 = message.readDoubleLE(0);
            var value2 = message.readInt16LE(8);
            var value3 = message.readInt8(10);

            //message.writeDoubleLE(8.5,0);

            ws.send(message, {
                binary: true
            });
        } else {
            if (message == "injest") {
                ws.send("requested: " + message);
            } else if (message == "something") {
                wss.clients[0].send('server side initiated call');
            } else {
                ws.send("received text: " + message);
            }
        }

    });

    // ws.send('something');    // Sent when connection opened.
});

所以你看,一切都很简单。

这是我的问题。如何从服务器端应用程序本身的NodeJS代码访问此WebServer?

我试过以下:

var ws = new WebSocket("ws://localhost:443");

ws.on('message', function (message) {
    wss.clients[0].send('server side initiated call 1 ');
});

ws.on('close', function (code) {
    wss.clients[0].send('server side initiated call 2 ');
});

ws.on('error', function (error) {
    wss.clients[0].send(error.toString());
});

ws.send("k");

使用ECONNREFUSED 127.0.0.1:443触发错误功能。

我设置服务器时没有指定端口。如果我这样做,那么从我的客户端html页面调用服务器失败。

那么简单地说,我如何在NodeJS中设置一个WebSocket客户端来访问在该应用程序中创建的WebSocketServer?

答案

不要使用localhost。用127.0.0.1替换它。

  1. 实例化服务器

let WebSocketServer = require("ws").Server; let ws = new WebSocketServer({port: 9090});

ws.on('connection', function (ws) {
    console.log(nHelp.chalk.red.bold('Server WebSocket was connected.'));

    //  Add the listener for that particular websocket connection instance.
    ws.on('message', function (data) {
       //code  goes here for what you need
 });

    ws.on('close', function () {
        console.log('websocket connection closed!');
    });

});

您可以在同一个文件中打开其他端口和路由(例如Express),或者为WS以及btw打开其他端口。

以上不是用于TLS的Secure WS服务器的代码。这有点不同。

以上是关于NodeJS中的Websockets。从服务器端WebSocket客户端调用WebSocketServer的主要内容,如果未能解决你的问题,请参考以下文章

Websockets:从NodeJS websocket服务器到带有WebSocketSharp的C#客户端的多个响应

Websockets - 服务器端要求(Windows 服务器,不是 Apache)

Node Js、websockets 保存通道中的连接

Node Js 和 websockets

如何在NodeJS中代理websocket连接到其他websockets

Websockets(ws) , NodeJs 集群,