首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS -访问外部进程时如何处理"listen EADDRINUSE“

NodeJS -访问外部进程时如何处理"listen EADDRINUSE“
EN

Stack Overflow用户
提问于 2013-06-13 22:35:08
回答 2查看 1.9K关注 0票数 3

我使用phantomJS打印PDF,带有phantomjs-node模块。它工作得很好,但当我试图一次创建几个文件时,它抛出一个未处理的错误"Listen EADDRINUSE。

我认为这是因为模块使用了phantomJS,这是一个外部进程,它不能多次将它绑定到同一个端口?

无论如何,我不能捕捉到这个错误,我想解决这个问题,至少在发生这种情况时避免服务器崩溃。我考虑使用一个“全局”变量,比如一个锁,以便在当前调用完成之前阻塞并发调用。

有没有关于如何实现它的想法,或者任何其他解决方案?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-03 07:29:19

来自@AndyD的代码不正确,imho。参见中的第45 - 54行

https://github.com/sgentle/phantomjs-node/blob/master/phantom.coffee

所以这个例子应该是

代码语言:javascript
复制
var portscanner = require('portscanner');
var phantom = require('phantom');

portscanner.findAPortNotInUse(40000, 60000, 'localhost', function(err, freeport) {
  phantom.create({'port': freeport}, function(ph){
    ...
  }
});
票数 2
EN

Stack Overflow用户

发布于 2013-06-14 06:02:37

您应该能够在每次调用create时传入一个端口号:

代码语言:javascript
复制
var phantom = require('phantom');
phantom.create(null, null, function(ph){

},  null, 11111);

然后,您可以使用计数器来确保每次启动phantomjs-node时都是不同的。

如果您每次都要启动一个新进程,并且不能共享计数器,那么您可以使用portscanner来查找空闲端口:

代码语言:javascript
复制
var portscanner = require('portscanner');
var phantom = require('phantom');

portscanner.findAPortNotInUse(40000, 60000, 'localhost', function(err, freeport) {
  phantom.create(null, null, function(ph){
    ...
  }
},  null, freeport);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17089817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档