2014-06-05 29 views
1

與此問題相關Browser with JavaScript TCP Client我問我是否可以從瀏覽器連接到tcp服務器。我發現它不會工作,所以我要求另一個解決方案。 '0101'爲我提供了兩臺服務器。一個連接到C++應用程序的tcp服務器和一個從瀏覽器接收數據的websockets服務器。我原來建立了它們中的每一個,但我不知道如何連接它們,因此我可以從C++應用程序中的瀏覽器接收數據。Node.js websocket-server和tcp-server連接

這裏是WebSockets的服務器:

var ClientListe = {}; 
// Anzahl der Verbundenen Clients 
var ClientAnzahl=0; 

// Websocket-Server 
var WebSocketServer = require('ws').Server 
var wss = new WebSocketServer({host: '127.0.0.1',port: 80}); 

wss.on('connection', function(ws) 
{ 
    // Client-Anzahl hochzählen 
    ClientAnzahl++; 
    // Client-Verbindung mit in die Client-Liste Aufnehmen 
    ws['AUTH'] = ClientAnzahl; 
    ClientListe[ws['AUTH']] = ws; 
    // Ausgabe 
    console.log('client '+ClientAnzahl+' verbunden...'); 

    ws.on('message', function(message) 
    { 
     console.log('von Client empfangen: ' + message); 

     for(client in ClientListe) 
     { 
      ClientListe[client].send('von Server empfangen: ' + message); 
     } 

    }); 

    ws.on('close', function() 
    { 
     // Client aus der ClientListe Löschen 
     delete ClientListe[ws['AUTH']]; 

     // Nachricht der Trennung an die Console ausgeben 
     console.log('Client '+ ws['AUTH'] +' getrennt.'); 
    }); 

}); 

,這裏是TCP服務器:

// Load the TCP Library 
net = require('net'); 

// Keep track of the chat clients 
var clients = []; 

// Start a TCP Server 
net.createServer(function (socket) { 

// Identify this client 
socket.name = socket.remoteAddress + ":" + socket.remotePort; 

// Put this new client in the list 
clients.push(socket); 

// Send a nice welcome message and announce 
socket.write("Welcome " + socket.name + "\n"); 
broadcast(socket.name + " joined the server\n", socket); 

// Handle incoming messages from clients. 
socket.on('data', function (data) { 
broadcast(socket.name + " message: " + data, socket); 
}); 

// Remove the client from the list when it leaves 
socket.on('end', function() { 
clients.splice(clients.indexOf(socket), 1); 
broadcast(socket.name + " left the server.\n"); 
}); 
// Send a message to all clients 
function broadcast(message, sender) { 
clients.forEach(function (client) { 
// Don't want to send it to sender 
if (client === sender) return; 
client.write(message); 
}); 
// Log it to the server output too 
process.stdout.write(message) 
} 

}).listen(80); 

// Put a friendly message on the terminal of the server. 
console.log("TCP Server running at localhost port 80\n"); 

兩者都複製了互聯網的測試有些情況下

回答

0

在同一文件中創建一個TCP服務器(的NodeJS爲例)

var net = require("net"); 

var server = net.createServer(function(c) { //'connection' listener 
    console.log('server connected'); 

    c.on('end', function() { 
     console.log('server disconnected'); 
    }); 

    c.write('hello\r\n'); 
    c.pipe(c); 
}); 

server.listen(8124, function() { //'listening' listener 
    console.log('server bound'); 
}); 

然後(可選的課程)創建不同的端口號的WS服務器

var WebSocketServer = require("ws").Server; 

var wss = new WebSocketServer({ 
    port: 8080 
}); 

wss.on("connection", function(ws) { 
    console.log("CONNECTED"); 

    // ws.on("message"), ws.on("close"), ws.on("error") 
}); 

現在你應該有兩個服務器,一個用於普通套接字,另一個用於WebSockets。

//正如我在以前的問題和皮特所提及,這是好了很多,在C使用WebSockets ++以及,而不是創建兩個服務器...

+0

謝謝你的回覆。這兩臺服務器如何通信?例如,tcp服務器接收數據並將其傳輸到websocketserver並將其發送給客戶端? – user3705887

+0

就像TCP服務器第一次收到一樣,然後作爲客戶端發送到websocketserver。 – user3705887

+0

您的所有客戶都將在陣列中。如果您將收到一些數據,例如使用TCP連接,您可以將這些數據作爲'wsClients [clientID] .send(someData);' – 0101

0

降TCP服務器,並使C++客戶端連接到websockets服務器。你需要在C++端的TCP連接之上實現websocket協議(你真正需要的只是一些前端協商websocket)。這兩臺服務器試圖使用端口80時遇到問題。

順便說一句,您還應該考慮將HTTPS用於WebSocket而不是HTTP,因爲它避免了代理遍歷的問題。但是首先要處理HTTP案例,因爲在C++端實現這個會比較複雜。

+0

那麼什麼我從你的評論是,我只需要從節點使用websocket-server?我不想在C++中構建websocket-server,而只是連接到從C++應用程序接收數據的服務器。 – user3705887

+0

使C++成爲websocket客戶端。然後,您只有1臺服務器正在與之通話。 另一種選擇是使TCP服務器使用與websocket服務器不同的端口並另外連接到websocket服務器。否則,TCP服務器將如何將內容發送到由websocket服務器接收的C++客戶端? 或者,只需讓websocket服務器也可以接受不同端口號上的TCP連接(如果在Node中可以創建多個服務器?)。然後在websocket服務器接收數據時將消息傳遞給TCP服務器的客戶端。 – Pete

+0

即websocket服務器在我之前的評論的後一種情況下需要具有指向tcp服務器的變量。 – Pete