node server not working with express-ws

2019-09-14 23:33发布

I have a node WebServer capable of communicating with Browser(say browserInstance) and linux terminal(say ProxyInstance) via Websockets. The job of the webserver is to handover the data from terminal to WebBrowser and vice-verse. Please find the server.js code below:

var express = require('express');
var expressWs = require('express-ws');


var expressWs = expressWs(express());
var app = expressWs.app;
var appForpage = express();


var browserInstance;
var ProxyInstance;
var browserCounter = 0;
var ProxyCounter = 0;


app.ws('/fromBrowser', function(ws, req, next) {

    console.log("~~~~~~~~~~~~BROWSER");

    if(browserCounter == 1){
            ws.on('message', function(msg) {
                    console.log("Messagae from Browser :", msg);
                    ProxyInstance.send(msg);
            });
    }else{
            browserInstance = ws;
            ws.on('message', function(msg) {
                    console.log("Message from Browser :", msg);
                    ProxyInstance.send(msg);
            });

            browserCounter = 1;
    }


     ws.on('close', function(){
          console.log("Ws Connection closed");
    });

    //next();
});

app.ws('/fromProxy', function(ws, req, next) {
    console.log("~~~~~~~~~~~~PROXY");

    if(ProxyCounter == 0){
            ProxyInstance = ws;
            ProxyCounter = 1;
    }else if(browserCounter == 1){
            ws.on('message', function(msg) {
                    console.log("Message from Proxy: ", msg);
                    browserInstance.send(msg);
            });
    }

    ws.on('close', function(){
          console.log("Ws Connection closed");
    });
    //next();
});

appForpage.use(express.static(__dirname + '/public/')); // index.html resides in public directory

appForpage.listen(5000)
app.listen(3000)

First I am creating ws connection from proxy to webserver(/fromProxy) and then from browser(/fromBrowser). The connection was successfully created. When i try to send data from Browser to proxy via Webserver, it works fine. In return to the 1st message at proxy end when tries to communicate Browser via WebServer, this one failed. I haven't received any message from Proxy. I need to run the respective ends in the same order(Proxy first and then Browser..).

I am just beginner to node. I haven't find any example over internet for my case. What am I missing here ?

1条回答
Anthone
2楼-- · 2019-09-14 23:43

That's really silly :( .I haven't registered my messsage callback from proxy. Please find the working code below.

var express = require('express');
var expressWs = require('express-ws');


var expressWs = expressWs(express());
var app = expressWs.app;
var appForpage = express();


var browserInstance;
var ProxyInstance;
var browserCounter = 0;
var ProxyCounter = 0;


app.ws('/fromBrowser', function(ws, req, next) {

    console.log("~~~~~~~~~~~~BROWSER");

    if(browserCounter == 1){
            ws.on('message', function(msg) {
                    console.log("Messagae from Browser :", msg);
                    ProxyInstance.send(msg);
            });
    }else{
            browserInstance = ws;
            ws.on('message', function(msg) {
                    console.log("Message from Browser :", msg);
                    ProxyInstance.send(msg);
            });

            browserCounter = 1;
    }


     ws.on('close', function(){
          console.log("Ws Connection closed");
    });

    //next();
});

app.ws('/fromProxy', function(ws, req, next) {
    console.log("~~~~~~~~~~~~PROXY");

    if(ProxyCounter == 0){
            ProxyInstance = ws;
            ProxyCounter = 1;
    }

/*This is the place where i went wrong. damnn..*/
    ws.on('message', function(msg) {
           console.log("Message from Proxy: ", msg);
           browserInstance.send(msg);
    });

    ws.on('close', function(){
          console.log("Ws Connection closed");
    });
    //next();
});

appForpage.use(express.static(__dirname + '/public/')); // index.html resides in public directory

appForpage.listen(5000)
app.listen(3000)
查看更多
登录 后发表回答