簡體   English   中英

Node.js WebSocket服務器和TCP服務器連接

[英]Node.js websocket-server and tcp-server connection

與此問題相關的問題使用JavaScript TCP Client的瀏覽器,我詢問是否可以從瀏覽器連接到TCP服務器。 我發現這行不通,所以我要求其他解決方案。 “ 0101”讓我建立了兩個服務器。 一個用於連接到c ++應用程序的tcp服務器,一個用於從瀏覽器接收數據的websockets服務器。 我最初建立了它們中的每一個,但是我不知道如何連接它們,因此我可以從c ++應用程序中的瀏覽器接收數據。

這是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");

兩者都被復制到互聯網之外以測試某些情況

刪除TCP服務器,並使C ++客戶端連接到websockets服務器。 您需要在C ++端的TCP連接的頂部實現websockets協議(您真正需要的只是一些前言以協商websocket)。 這兩個服務器都嘗試使用端口80時遇到問題。

順便說一句,您還應該考慮對Websocket使用HTTPS而不是HTTP,因為它避免了代理遍歷的問題。 但是首先使HTTP情況起作用,因為在C ++端實現起來會更加復雜。

創建一個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。

//正如我在前面的問題和Pete中提到的那樣,最好也使用C ++中的WebSocket而不是創建兩個服務器...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM