2016-11-23 99 views
0

我有一个节点WebServer能够通过Websockets与浏览器(比如browserInstance)和linux终端(比如ProxyInstance)通信。 Web服务器的工作是将数据从终端切换到WebBrowser,然后是副本。请看以下server.js代码:节点服务器不能与express-ws工作

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) 

首先我创建从代理服务器WS连接(/ fromProxy),然后从浏览器(/ fromBrowser)。连接已成功创建。当我尝试通过网络服务器将数据从浏览器发送到代理时,它工作正常。在尝试通过WebServer与浏览器进行通信时,作为代理服务器端的第一条消息返回,此失败。我还没有收到代理的任何消息。我需要以相同的顺序运行相应的代码(代理优先,然后浏览器..)。

我只是初学者的节点。我没有找到任何通过互联网为我的例子的例子。我在这里错过了什么?

回答

0

这是非常愚蠢的。我:(没有注册代理,从我的讯息话题回调。请看以下工作代码。

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)