我希望程序停止侦听请求,并在成功加载页面一次后继续使用代码。我已经尝试在函数的代码末尾添加break;
,但它说这是非法的中断。我不知道应该使用什么而不是休息。
我应该如何让它退出该功能?
提前致谢。
我使用this site中的以下代码与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 :(得分:2)
您退出某个功能(可能是return
,而不是break
),您正在告诉正在侦听的对象港口停止这样做。
如果您希望服务器停止侦听新连接,请使用其close
method。
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);
请注意,服务器不会立即关闭。 http.Server#close
拨打net.Server.close
,其中说:
停止服务器接受新连接并保留现有连接。此函数是异步的,当所有连接都结束且服务器发出
'close'
事件时,服务器最终会关闭。callback
事件发生后,将调用可选的'close'
。与该事件不同,如果服务器在关闭时未打开,则会调用Error作为唯一参数。
在我的快速本地测试中,需要一段时间。如果您通过'connection'
事件as described in this answer拦截连接,并且销毁连接以及关闭服务器,则可以使其更加主动:
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);
答案 1 :(得分:0)
您可以通过拨打server.close()
来停止服务器的监听。