首页 > nodejs中是不是一个进程只能有一个http监听

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')
});

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是可以的


不会的。

首先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

【热门文章】
【热门文章】