-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmd_docs_md_build.html
106 lines (106 loc) · 9.52 KB
/
md_docs_md_build.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>btpd: Сборка</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">btpd
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Создано системой Doxygen 1.9.1 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Поиск');
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div class="PageDoc"><div class="header">
<div class="headertitle">
<div class="title">Сборка </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Требования для сборки:</p><ul>
<li>g++ или clang++ (с поддержкой 17 стандарта)</li>
<li>cmake (3.10)</li>
<li>git</li>
<li>php7 или php8</li>
</ul>
<div class="fragment"><div class="line">sudo apt install g++ cmake git</div>
<div class="line">git clone https://github.com/mambaru/phpbtp-client.git</div>
<div class="line">cd phpbtp-client</div>
<div class="line">make release</div>
</div><!-- fragment --><p>В процессе сборки будут автоматически подгружены необходимые модули Boost и PHP-CPP, а также подключены необходимые git-субмодули. Сам <code>phpbtp-client.so</code> будет собран в статике и не будет зависеть он сторонних <code>.so</code>. В случае успешной сборки в директории ./extension:</p>
<div class="fragment"><div class="line">Makefile</div>
<div class="line">phpbtp-client.conf</div>
<div class="line">phpbtp-client.ini</div>
<div class="line">phpbtp-client.so</div>
<div class="line">test.php</div>
</div><!-- fragment --><h1><a class="anchor" id="autotoc_md12"></a>
Установка</h1>
<div class="fragment"><div class="line">cd ./extension</div>
<div class="line">sudo make install</div>
</div><!-- fragment --><p>Это сработает только если PHP установлен по стандартным путям, в противном случае нужно в ручную скопировать <code>phpbtp-client.so</code> и <code>phpbtp-client.ini</code> в необходимые директории для расширений PHP.</p>
<p>Для проверки работоспособности можно запустить:</p>
<div class="fragment"><div class="line">php test.php</div>
</div><!-- fragment --><p>Если не будет ошибок, значит расширенее установлено успешно. Данные отправляются по UDP, поэтому ошибок подключения к серверу btpd не будет. В конфигурации по умолчанию <code>phpbtp-client.conf</code> указан адресс <code>127.0.0.1</code>, а в примерах конфигурации <code>btpd</code> скорее всего <code>0.0.0.0</code>. Чтобы получить данные с тестовго скрипта в конфигурации расширения нужно изменить поля <code>addr</code> (или в конфигурации демона <code>addr</code> установить в <code>127.0.0.1</code>, если предполагается, что он будет работать локально).</p>
<h1><a class="anchor" id="autotoc_md13"></a>
Конфигурация</h1>
<p>Подробное описание опций смотрите в комметариях файла конфигурации <code>phpbtp-client.conf</code>. Здесь отмечу пару не очевидных моментов.</p>
<p>Демон <code>btpd</code> может работать по двум протоколам на разных портах. В примерах конфигураций которые с ним идут это порт <code>38001</code> для класического <code>JSON-RPC</code> и порт <code>38000</code> для так называемого <code>копактного JSON-RPC</code>, они не совместимы между собой. Расширение <code>phpbtp-client.so</code> может работать с тем или иным, в зависимости от конфигурации. Предоставляемый файл конфигурации работает с компактным вариантом. Опция <code>"json_compact": true</code> указывает то, что сообщения нужно отпаравлять в компактном варианте. Если нужен класический <code>JSON-RCP</code> то помимо установки <code>"json_compact": false</code> нужно также сменить порты на <code>38001</code>. В случе если ошибетесь с портами в логах <code>phpbtp-client.so</code> (по умолчанию отключены) ошибок вы не увидите, но вы эти ошибки увидите в логах демона <code>btpd</code></p>
<p>Компактный <code>JSON-RPC</code> сериализует все структуры <code>params</code> в массивы <code>JSON</code> где каждый элемент массива соответствует полю структуры, уменьшая таким образом размер сериализованного <code>JSON</code>. Это очень не удобно если вы пытаетесь записать или анализировать компактный <code>JSON</code> в ручную, но на програмном уровне это очень похоже на бинарные протоколы, с той лишь разницей, что сохраняеться какая-никая читабельность. Библиотека <a href="https://github.com/mambaru/wjson">wjson</a> которая исползуеться для сериализации как в расширении <code>phpbtp-client</code>так и на демоне <code>btpd</code> не сильно уступает тому же <code>protobuf</code> в производительности по сериализации даже для классического <code>JSON</code>, но компактный вариант <code>JSON</code> может не уступать <code>protobuf</code>по размеру сериализованного сообщения и даже первосходить его частных случаях (например когда передаётся много <code>0</code>).</p>
<h1><a class="anchor" id="autotoc_md14"></a>
Конфигурация</h1>
<p>Вся конфигурация в JSON-файле</p>
<h1><a class="anchor" id="autotoc_md15"></a>
Сборка</h1>
<p>Для ручной сборки на repobuild4 или repobuild3: </p><div class="fragment"><div class="line">git clone [email protected]:cpp/phpbtp-client.git</div>
<div class="line">cd phpbtp-client</div>
<div class="line">BOOST_ROOT=/usr/monamour/boost/ make static</div>
<div class="line">cd build/bin</div>
<div class="line">ls -l</div>
</div><!-- fragment --><p> Для сборки под CentOS нужно установлить cmake3 и задать переменную CMAKE: </p><div class="fragment"><div class="line">CMAKE=cmake3 CXX_STANDARD=11 make static</div>
</div><!-- fragment --><p>В случае успешной сборки в директории build/bin: </p><div class="fragment"><div class="line">Makefile</div>
<div class="line">phpbtp-client.conf</div>
<div class="line">phpbtp-client.ini</div>
<div class="line">phpbtp-client.so</div>
<div class="line">test.php</div>
</div><!-- fragment --><p>Эти файлы нужно перенести на целевую машину и выполнить <code>make install</code></p>
<p>Требования:</p><ul>
<li>g++ 4.9 и выше (до g++-9, на g++-10 есть проблемы (январь 2021))</li>
<li>git</li>
<li>cmake 3.1 и выше</li>
<li>boost-1.76 (самый свежий) собраный с ключами <code>./b2 link=static runtime-link=static</code></li>
<li>php7 </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Создано системой <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
</small></address>
</body>
</html>