我使用phantomJS打印PDF,使用phantomJS -node模块。它工作得很好,但当我尝试一次创建几个文件时,它会抛出一个未处理的错误"Listen EADDRINUSE.
我认为这是因为模块使用phantomJS这是一个外部进程,它不能将其绑定到同一端口几次?
无论如何,我不能捕获这个错误,我想解决这个问题,至少通过避免服务器崩溃时发生。我想使用一个"全局"变量,像一个锁,为了阻止并发调用,直到当前调用完成。
你知道如何实现它吗,或者有其他的解决方案吗?
@AndyD的代码是不正确的。参见
第45 - 54行https://github.com/sgentle/phantomjs-node/blob/master/phantom.coffee所以这个例子应该是
var portscanner = require('portscanner');
var phantom = require('phantom');
portscanner.findAPortNotInUse(40000, 60000, 'localhost', function(err, freeport) {
phantom.create({'port': freeport}, function(ph){
...
}
});
您应该能够在每次调用create时传递端口号:
var phantom = require('phantom');
phantom.create(null, null, function(ph){
}, null, 11111);
你可以使用计数器来确保每次启动phantomjs-node时它都是不同的。
如果你每次都启动一个新进程,你不能共享一个计数器,那么你可以使用端口扫描器找到一个空闲端口:
var portscanner = require('portscanner');
var phantom = require('phantom');
portscanner.findAPortNotInUse(40000, 60000, 'localhost', function(err, freeport) {
phantom.create(null, null, function(ph){
...
}
}, null, freeport);