2016-12-19 1 views
0

Ich versuche, einen Socket-Server mit Node.js zu bauen. Der Server muss mehrere TCP-Verbindungen verarbeiten. Hier ist mein Code:NodeJS So behandeln Sie mehrere TCP-Verbindungen mit Socket

const HOST = '127.0.0.1'; 
const PORT = 5000; 

var app = require('net')(); 
var sleep = require('sleep'); 

var server = net.createServer().listen(PORT, HOST); 
server.on('connection', function(sock){ 
    console.log('CONNECTED: ' + sock.remoteAddress + ':' + sock.remotePort); 
    var c = 0; 
    while(true){ 
     sock.write(c.toString()+' '); 
     c++; 
     sleep.sleep(1); 
    } 
}); 
console.log('Server listening on ' + HOST + ':' + PORT); 

Wie behandelt man alle Verbindungen parallel statt Warteschlange? Danke: D

+0

'Wie mit allen Verbindungen parallel statt Warteschlange?' Sie 'Schlange' weil yo Sie haben die Ereignisschleife mit diesem 'while (true)' blockiert. Das heißt, Knoten ist ein einzelner Thread, alles ist sequentiell, aber schnell genug, um das Gefühl zu geben, es sei //, für wahr // ism, benutze eine andere Sprache wie 'go'. –

Antwort

1

Wie bereits in den Kommentaren erwähnt, können Sie die Ereignisschleife mit while(true) blockieren, stattdessen versuchen setInterval anstelle, die zu erreichen gewünschtes Ergebnis:

setInterval(function() { 
    sock.write(c.toString()+' '); 
    c++; 
}, 1000) 
+0

Diese Antwort ist, was ich brauche. Vielen Dank! – PikaCool

0

Ich bin mir nicht sicher, ob ich Ihre Frage verstanden habe.

Aber jeder Client löst die server.on ('connection') Anfrage aus, die über Ihre Sockenvariable verfügbar sein wird, solange der Benutzer noch da ist. Anstatt zu versuchen, Ihren Server zu blockieren, um an den Benutzer zu erinnern, müssen Sie sich eine ereignisbasierte Konfiguration vorstellen, die zwei Arten von Ereignissen hat: sock.on, die ein vom Client ausgelöstes Ereignis und ein emitter -Ereignis erhält, das Daten sendet zum Zielkunden.

so könnte man so etwas wie dieses

server.on('connection', function(sock){ 
    sock.on('event_name', function(data_received){ 
     // Some stuff 
    }); 
    sock.emit("connected", {"message", "Hi From the server"}); 
}); 

vorstellen, ich denke, socket.io is a great place to start

+0

Danke. Ich habe mit Verbindungen gearbeitet, indem ich einen neuen Thread erstellt habe, als ich ihn in Java geschrieben habe. Java ist keine ereignisgesteuerte Sprache. – PikaCool

+0

Falls es hilfreich sein könnte, gibt es einen Java-Client für Socket io: https://github.com/socketio/socket.io-client-java – fbhcf

Verwandte Themen