Quiero que el programa deje de escuchar solicitudes y continúe con el código después de que haya cargado correctamente la página una vez. He intentado poner un break; al final del código en la función, pero dice que es un salto ilegal. No sé qué debería usar en lugar de descanso.

¿Cómo debo hacer que salga de la función?

Gracias de antemano.


Estoy usando el siguiente código de este sitio con Node.js:

var http = require("http");
var port = 3000;
var serverUrl = "localhost";

var Kafka = require('no-kafka');
var connString = ' kafka://192.168.0.108:9092, 192.168.0.108:9092 '
var consumer = new Kafka.SimpleConsumer({ connectionString: connString });

var message = ["start"];

var server = http.createServer(function(req, res) {
    console.log("Request: " + req.url);  
    var now = new Date();  
    var html = "<p>Hello World, the time is " + now + "- Messages: " + message + ".</p>";
    res.end(html);
    console.log("a");
    server.close();
    console.log("b");
});

// data handler function can return a Promise 
var dataHandler = function (messageSet, topic, partition) {
    messageSet.forEach(function (m) {
        console.log('topic received: ');
        console.log({
            'topic':topic,
            'partition': partition,
            'offset': m.offset,
            'message': m.message.value.toString('utf8')     
        });
        message.push(m.message.value.toString('utf8'));

        console.log("Listening at " + serverUrl + ":" + port);
        server.listen(port, serverUrl);

        console.log("c");
    });
};

return consumer.init()
.then(function () {
    return consumer.subscribe('temp', 0, dataHandler);
});
0
Ryan 6 abr. 2017 a las 18:30

2 respuestas

La mejor respuesta

No está saliendo de una función (que sería return, no break), le está diciendo al objeto que está escuchando en un puerto que deje de hacerlo.

Si desea que el servidor deje de escuchar conexiones nuevas, use su close método.

var http = require("http");
var port = 3000;
var serverUrl = "localhost";

var server = http.createServer(function(req, res) {

  console.log("Request: " + req.url);

  var now = new Date();
  var html = "<p>Hello World, the time is " + now + ".</p>";
  res.end(html);
  server.close(); // <=======================================
  // *** If you want to do something else at this point, call it from here ***
});

console.log("Listening at " + serverUrl + ":" + port);
server.listen(port, serverUrl);

Tenga en cuenta que el servidor no se cerrará de inmediato. http.Server#close llama a net.Server.close, que dice:

Evita que el servidor acepte nuevas conexiones y mantiene las conexiones existentes. Esta función es asíncrona, el servidor finalmente se cierra cuando finalizan todas las conexiones y el servidor emite un evento 'close'. El callback opcional se llamará una vez que ocurra el evento 'close'. A diferencia de ese evento, se invocará con un Error como único argumento si el servidor no estaba abierto cuando se cerró.

En mi prueba local rápida, eso lleva un tiempo. Puede hacerlo más proactivo si intercepta la conexión a través del evento 'connection' como se describe en esta respuesta, y destruya la conexión y cierre el servidor:

var http = require("http");
var port = 3000;
var serverUrl = "localhost";

var connections = [];
var server = http.createServer(function(req, res) {

  console.log("Request: " + req.url);

  var now = new Date();
  var html = "<p>Hello World, the time is " + now + ".</p>";
  res.end(html);
  connections.forEach(function(con) {   // ***
      con.destroy();                    // ***
  });                                   // ***
  server.close();                       // ***
  // *** If you want to do something else at this point, call it from here ***
});
server.on("connection", function(con) { // ***
  connections.push(con);                // ***
});                                     // ***

console.log("Listening at " + serverUrl + ":" + port);
server.listen(port, serverUrl);
2
Community 23 may. 2017 a las 12:32

Puede evitar que el servidor escuche llamando server.close().

0
Marc 6 abr. 2017 a las 15:33