我使用phantomJS打印PDF,使用phantomjs-node模块。它运行良好但是当我尝试一次创建多个文件时,它会抛出一个未处理的错误" Listen EADDRINUSE。
我认为这是因为模块使用了phantomJS,这是一个外部进程,它不能多次将它绑定到同一个端口?
无论如何,我无法捕捉到这个错误,我想至少通过避免服务器崩溃来解决这个问题。 我想过使用" global"变量,如一个锁定器,以阻止并发呼叫,直到当前的呼叫结束。
有关如何实现该解决方案或任何其他解决方案的想法吗?
答案 0 :(得分:2)
每次调用create:
时,都应该能够传入一个端口号var phantom = require('phantom');
phantom.create(null, null, function(ph){
}, null, 11111);
然后,您可以使用计数器确保每次启动phantomjs-node时它都不同。
如果您每次都开始新流程并且无法共享计数器,那么您可以使用portscanner查找空闲端口:
var portscanner = require('portscanner');
var phantom = require('phantom');
portscanner.findAPortNotInUse(40000, 60000, 'localhost', function(err, freeport) {
phantom.create(null, null, function(ph){
...
}
}, null, freeport);
答案 1 :(得分:2)
来自@AndyD的代码不正确imho。见
中的第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){
...
}
});