2016-01-13 3 views
2

Я искал всюду на этом сайте и в Интернете, не получив четкого понимания.local phantomjs/highcharts export server on tomcat

Я успешно установил phantomjs и Highcharts на CentOS 6.7 в соответствии с инструкциями Setting Up Export Server

Вот необходимые .js файлы в "/ Программное обеспечение/phantomjs/Highcharts/Highcharts-экспорт-сервер-мастер/phantomjs":

  • Highcharts-convert.js Highcharts-more.js highstock.js highmaps.js D3-funnel.js gauge.min.js exporting.js jquery.1.9.1.min.js

Я очень новичок в phantomjs и особенно в highcharts - я хочу, чтобы предоставить пакетные программы, запущенные на одном сервере (сервер B), для отправки запросов POST на сервер экспорта на сервере A и возврата .png или .pdf файлов.

Война развертывается на сервере Tomcat и 10 отдельных серверов работают начиная с порта 7777 и сервер PhantomJS работает, а на 127.0.0.1:3003 на следующей команды и приложения-convert.js файл конфигурации:

phantomjs highcharts-convert.js -host 127.0.0.1 -port 3003 
phantomjs свойства

хоста и порта phantomjs слушает

хозяина = 127.0.0.1 порт = 7777

расположение phantomjs исполняемым, может быть, например,>/USR/местные/бен/phantomjs

Exec =/Программное обеспечение/phantomjs/phantomjs

уточнить здесь альтернативное расположение (весь путь!) для скрипта, который> запускает сервер Phantomjs. F.eks /home/bert/scripts/my-highcharts-convert.js Оставьте пустым, если вы используете скрипт в комплекте с сервером экспорта.

скрипт =

Connect свойства, используемые для соединения с phantomjs работает как HTTP-сервер>

все значения в миллисекундах

задает время ожидания при чтении из phantomjs когда соединение> установлено

readTimeout = 6000

таймаут для использования при открытии канала связи к phantomjs> сервер

ConnectTimeout = 1000

весь запрос на сервер phantomjs планируется, максимальное время ожидания может длиться> для это значение. Это связано с тем, что в java вы не можете полагаться на два предыдущих таймаута.

maxTimeout = 6500

бассейн свойства

количество phantomjs серверов можно запустить в бассейне.

PoolSize = 10

Бассейн выполнен в виде BlockingQueue. Прося сервера фантомного> подключение к и ничего не доступен, он ждет число миллисекунд> определяется maxWait

maxWait = 6000

Храните файлы в папке временных течение определенного retentionTime, > определено в миллисекундах

retentionTime = 300000

Я могу удалить демо-страницу http://my-server/highcharts-export-web/ и отлично работает в браузере.

вопросов, которые я:

  1. Какой URL я хочу использовать для моей удаленной программы пакетной обработки?
  2. Является ли // my-server/highcharts-export-web/должен работать для моих удаленных вызовов?
  3. Является ли webapp предназначен для получения прямых запросов от клиентов без браузера?
  4. Какой процесс вызывает 10 серверов в пуле серверов?

Может ли кто-нибудь предоставить пример того, как вы должны настроить удаленные вызовы на сервер экспорта (они будут запускаться несколько раз в день) и возвращать.png или .pdf из пакетной программы?

Благодаря Брайан

ответ

0

Мы имели успех! Часть проблемы заключалась в вызове размещенного сервера по протоколу HTTP с HTTPS (javascript ему не нравится.

Мы также являемся домом для холодного душа, поэтому этот первый пример представляет собой прямой вызов на стороне сервера с базовой схемой с минимальной базой.

Примечание: Мы не имеем успеха, призывающую HTTP с HTTPS на стороне сервера через cfhttp тег (который похож на PHP Curl вещи) ...

<!--- first we need to create a small chart ---> 
{ 
"xAxis":{ 
    "categories":["Jan","Feb","Mar"] 
    }, 
    "series":[{ 
     "data":[29.9,71.5,106.4] 
    }] 
} 

<!--- lets go a little bit larger (I cut in something bigger below... 
---> 
<cfsavecontent variable="stringItForMe"> 
<cfprocessingdirective suppressWhiteSpace="true"> 
{xAxis: {categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']},series: [{data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]}]} 
</cfprocessingdirective> 
</cfsavecontent> 

<!--- next we encode the variable the parameter names will normally have double quotes for cleanliness but highcharts exports works without them. ---> 

<cfset stepTwo = URLEncodedFormat(stringItForMe)> 

<!--- 
setting my URL target... 
---> 

<cfset urlMaker = "http://targetServer:10001/highcharts-export-web/"> 


<cfhttp url="#urlMaker#" result="r" method="post" timeout="1"> 
<cfhttpparam type="HEADER" name="Content-Type" value="application/x-www-form-urlencoded; charset=UTF-8"> 
<cfhttpparam name="data" type="body" value="async=true&type=jpeg&width=800&options=#stepTwo#"> 
</cfhttp> 

<cfset targetImage = urlMaker&r.fileContent> 

<cfoutput><img src="#targetImage#"/></cfoutput> 

Теперь это второй один JavaScript/JQuery он был разобран из примера jsfiddle, предоставленного highsoft, но я не помню, нашел ли его на форуме или на странице сервера exprt, но мы назвали highch (так как каждый наш рендеринг в доме выглядел намного лучше, я думаю, что у нас есть некоторые дополнительные зависимости, но в любом случае успех на обоих ...

Нам пришлось отлаживать этот javascript, чтобы получить coldfusion версия этой функции.

<br><br> 
<button id='b'>Run Code</button> 
<div id="container"></div> 

<script> 
$(function() { 
    $("#b").click(testPOST); 

    //var exportUrl = 'http://targetServer:10001/highcharts-export-web/'; 
    var exportUrl = 'https://export.highcharts.com/'; 

    function testPOST() { 

     var optionsStr = JSON.stringify({ 
      "xAxis": { 
       "categories": ["Jan", "Feb", "Mar"] 
      }, 
       "series": [{ 
       "data": [29.9, 71.5, 106.4] 
      }] 
     }), 
     dataString = encodeURI('async=true&type=jpeg&width=400&options=' + optionsStr); 

     if (window.XDomainRequest) { 
      var xdr = new XDomainRequest(); 
      xdr.open("post", exportUrl+ '?' + dataString); 
      xdr.onload = function() { 
       console.log(xdr.responseText); 
       $('#container').html('<img src="' + exporturl + xdr.responseText + '"/>'); 
      }; 
      xdr.send(); 
     } else { 
      $.ajax({ 
       type: 'POST', 
       data: dataString, 
       url: exportUrl, 
       success: function (data) { 
        console.log('get the file from relative url: ', data); 
        $('#container').html('<img src="' + exportUrl + data + '"/>'); 
       }, 
       error: function (err) { 
        debugger; 
        console.log('error', err.statusText) 
       } 
      }); 
     } 

    } 
}); 
</script> 

Я думаю, что с этими двумя рабочими примерами кто-то может перенести его на PHP или на другие языки с небольшой проблемой. просто имейте в виду, что ваша консоль открыта, если в javascript и отлаживается в Coldfusion :)

Наконец, одна из самых разочаровывающих частей этого открытия ударила по серверу, разговаривая с сервером, но отбрасывая default export example page в данные ИЛИ filecontent (для Coldfusion), у нас были царапины, потому что мы не знали, как пройти эту часть и просто получить наш файл.