Casperjs web服务多线程

我使用CasperJS脚本作为Web服务,从节点服务器访问它。 我无法做到的是让卡斯珀成为'多线程'。 如果我向邮递员两次同时向卡斯珀请求,结果将是两个请求之间的一个响应之间的混乱,第二个将为空。 我看到PhantomJS有一个页面原则,但我没有发现类似于卡斯帕的东西。

  • 我可以同时用多个请求调用Casper的Web服务并获得正确/一致的响应吗?
  • Web服务器需要一些配置来允许我这样做吗?
  • 请求是否以“特殊方式”完成? 有没有关于这个我应该知道的警告?
  • 如果它只能按顺序运行,会在同一台计算机上启动多个服务器,但不同的端口可以解决问题?
  • 这里是我正在谈论的casper web服务。 当我发出像locahost:1338 /?query = name.name这样的请求时,它将在指定的url上检索该查询。 当我用不同的查询进行2个并行请求时,我的问题就来了。

    
        //includes web server modules
        "use strict";
        var port = 1338;
        var server = require('webserver').create();
        var url = 'url to scrap';
    
        //start web server
        var service = server.listen(port, function(request, response) {
            var arr1 = [];
            var arr2 = [];
            var arr3 = [];
    
            var casper = require("casper").create({
                  verbose: true,
                  logLevel: 'error',
                  pageSettings: {
                    loadImages: false,
                    loadPlugins: false,
                    userAgent: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36'
                  },
                  clientScripts: ["vendor/jquery-1.12.1.js"]
            });
    
            casper.start(url, function() {
            }, function(){
                console.log(url + " not found");
                return;
            });
    
            casper.waitForSelector('.cssClass', function() {
            }, function(){
                console.log("not found");
                return;
            });
    
            casper.then(function() {
                var query = getQuery(request.url);
                casper.sendKeys('.cssClass', query);
                casper.click('.cssClass');
    
                casper.waitForSelector('.cssClass', function(){
                    arr1 = this.evaluate(function(){
                        var nodeList = document.querySelectorAll(".cssClass");
                        return Array.prototype.map.call(nodeList, function(node){
                            return node.textContent;
                        });
                    });
                }, function(){
                    console.log("not found");
                    return;
                });
    
                casper.then(function(){
                    if(names.length > 0)
                    {
    
                        casper.waitForSelector('.cssClass', function(){
                            arr2 = this.evaluate(function(){
                                var nodeList = document.querySelectorAll(".cssClass");
                                return Array.prototype.map.call(nodeList, function(node){
                                    return node.textContent;
                                });
                            });
                            console.log("found");
                        }, function(){
                            console.log("not found");
                            return;
                        });
    
                        casper.waitForSelector('.cssClass', function(){
                            arr3 = this.evaluate(function(){
                                var nodeList = document.querySelectorAll(".cssClass");
                                return Array.prototype.map.call(nodeList, function(node){
                                    return node.src;
                                });
                            });
                            console.log("found");
                        }, function(){
                            console.log("not found");
                            return;
                        });
                    }
                });
            });
    
            casper.run(function() {
                response.statusCode = 200;
                response.write(JSON.stringify({p1: arr1, p2: arr2, p3: arr3}));
                response.close();              
            });
        });
    
        console.log('nServer running at http://localhost:' + port+'/');
    
    
    链接地址: http://www.djcxy.com/p/73487.html

    上一篇: Casperjs web service multithread

    下一篇: Asynchronous call during a synchronous CasperJS operation