关于网友提出的“(node.js)nodejs中是不是一个进程只能有一个http监听”问题疑问,本网通过在网上对“(node.js)nodejs中是不是一个进程只能有一个http监听”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:(node.js)nodejs中是不是一个进程只能有一个http监听
描述:我尝试在一个nodejs进程中即做web服务监听8888口 又做websocket服务监听9999口 但是貌似只有先监听的那个服务会起来 是不是nodejs中一个进程只能监听一个端口
//web server
var server = http.createServer(function(req, res) {});
server.listen(8888, function() {
console.log('server running')
});
//websocket server
var server_for_socket = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type':'text/plain'});
res.end('i am websocket server');
});
server_for_socket.listen(9999, function() {
console.log('websocket start listening at port 9999')
});
解决方案1:http = require("http")
//web server
var server = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('okay');
});
server.listen(8888, function() {
console.log('server running')
});
var server1 = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('okay1');
});
server1.listen(9000, function() {
console.log('server1 running')
});
一个createServer一个port是可以的
解决方案2:不会的。
首先node是单线程的,但是并不代表只能监听某一个端口,因为他是基于事件模型的。eventHandler能保证它高效的运行。
以后最好贴一下你的错误堆栈,这样回答者能比较准确的知道哪儿错了。给你贴一段代码,你可以参考下:
var http=require('http');
var ports = [7006, 7007, 7008, 7009];
var servers = [];
var s;
function reqHandler(req, res) {
console.log({
remoteAddress: req.socket.remoteAddress,
remotePort: req.socket.remotePort,
localAddress: req.socket.localAddress,
localPort: req.socket.localPort,
});
}
ports.forEach(function(port) {
s = http.createServer(reqHandler);
s.listen(port);
servers.push(s);
});
来源:http://stackoverflow.com/questions/19296797/running-node-js-http-server-on-multiple-ports
以上介绍了“(node.js)nodejs中是不是一个进程只能有一个http监听”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1329836.html