1. Основан на swoole для обеспечения связи распределённого сервера.
2. Основан на thrift для предоставления услуг удалённого вызова процедур (RPC).
3. Основан на HTML5 для предоставления онлайн-платформы сетевого вещания.
4. Основан на swoole для предоставления синхронных и асинхронных сервисов пула соединений с базой данных.
5. Основан на swoole для доставки задач асинхронного сервера.
6. Основан на vmstat для предоставления сервиса мониторинга оборудования сервера в реальном времени.
7. Основан на yac и yaconf для предоставления сервисов совместного использования данных и конфигурации.
8. Основан на zqf для предоставления высокопроизводительных счётчиков, красных пакетов и сервисов двумерных кодов.
9. Отличная поддержка консольных сервисов shell для веб-страниц.
10. Основан на hprose для предоставления RPC-сервисов удалённого вызова и push-уведомлений.
11. Основан на расширении zqfHB для php для предоставления статистики выполнения php-скриптов.
location / {
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?$1 last;
}
}
Необходимо запустить php в режиме cli и выполнить /server/server.php
php server.php start
php server.php stop
php server.php restart
{
"require": {
"qieangel2013/zys": "2.0.0.1"
}
}
Устанавливает связь между несколькими серверами для обмена данными. Сервис автоматически подключается к онлайн-серверам и поддерживает горячее подключение после запуска без вмешательства человека.
Примечание:
Конфигурацию порта и прослушивания, журнала и т. д. необходимо выполнить в conf/application.conf.
Требуется наличие redis-сервера, и все распределённые серверы должны иметь возможность подключения к redis.
Веб-интерфейс может напрямую вызывать сервис.
Использование:
// Примечание: тип должен быть sql, file, если вам нужны другие функции, определите их самостоятельно
if($_FILES){
// Синхронизация данных
$sql = array('type'=>'sql','data'=>'show tables');
var_dump(distributed::getInstance()->query($sql));
//Синхронизация файлов (нет необходимости устанавливать rsync+inotify, можно реализовать синхронизацию файлов, которая использует триггерные механизмы и занимает мало ресурсов, вызывая sendfile с нулевым копированием)
$dir_pre=MYPATH.'/public/uploads/';
if(!is_dir($dir_pre.date('Ymd'))){
mkdir($dir_pre.date('Ymd'),0777,true);
}
if(is_uploaded_file($_FILES['file']['tmp_name'])){
$upname=explode('.',$_FILES['file']['name']);
$filename=uniqid().substr(time(),-4).'.'.$upname[1];
if(move_uploaded_file($_FILES['file']['tmp_name'],$dir_pre.date('Ymd').'/'.$filename)){
echo "Stored in: " . $dir_pre.date('Ymd').'/'.$filename;
$fileinfo = array('type'=>'file','data'=>array('path' =>'/public/uploads/'.date('Ymd').'/'.$filename,'size'=>$_FILES['file']['size'],'ext'=>$upname[1]));
var_dump(distributed::getInstance()->queryfile($fileinfo));
}else{
echo 'Stored failed:file save error';
}
}else{
echo 'Stored failed:no post ';
}
}
Локальный доступ: http:/localhost/index/distributed/
Архитектура:
Результаты выполнения:
Локальный доступ http://localhost/index/rpc (возвращает 0, что означает успех)
Файл сервиса находится в /server/mysql/DbServer.php.
Простой пакет находится в /application/library/mysql/dbclient.php.
Конфигурация находится в conf/application.ini.
; Конфигурация пула подключений к базе данных
DbServer.async=true // Конфигурация определяет, выполняется ли операция синхронно или асинхронно, по умолчанию не настроена для асинхронной операции, установите значение false для синхронной операции.
DbServer.multiprocess=false // Конфигурация, чтобы включить многопроцессорность, по умолчанию не настроено для однопроцессного блокирующего режима, многопроцессорный режим должен быть установлен в true.
DbServer.pool_num=20 // Настройка количества пулов подключений mysql.
DbServer.port=9501
DbServer.logfile="/server/log/DbServer.log"
DbServer.localip="192.168.2.13"
Использование:
$dbclient=new mysql_dbclient;
//print_r($data);
for ($i=0; $i <100 ; $i++) {
$dbclient->query("INSERT INTO user(name) VALUES('$i')");
//echo "INSERT INTO user(name) VALUES('$i')";
}
$data=$dbclient->query("select * from user");
$dbclient->close();
print_r($data);
exit;
Локальный доступ: http:/localhost/index/dbtest/
Страница записи видео: http://localhost/index/swoolelivecamera
Принимающая страница видео: http://localhost/index/swoolelive **Разработка на Vue.js с использованием HTML5: реализация интерфейса чата**
Адрес для демонстрации: http://www.jduxiu.com:88/live/index/index.
LiveIM — это платформа для прямых трансляций с интегрированными функциями чата в реальном времени. Поскольку исходный код не является открытым, для его получения требуется разрешение.
VMStat: мониторинг серверов
Для локального доступа к VMStat используйте адрес: http://localhost/vmstat/.
Выполните следующие действия:
YAC и Yaconf: совместное использование данных и конфигурации
Необходимо установить PHP-расширения YAC и Yaconf.
Пример использования:
echo Yaconf::get("conf.zqf");
Расширение YAC используется для хранения общих переменных. Пример использования в качестве счётчика высокой нагрузки:
$yac = new Yac();
$count=$yac->get('zqf');
if(!$count){
$yac->set('zqf', 1);
}else{
$yac->set('zqf', $count+0.5);
}
echo $count;
Счётчик высокой нагрузки, система «красных пакетов» и создание QR-кодов
Требуется установить расширение PHP zqf.
Сначала установите расширение PHP zqf.so с помощью команды phpize. Затем вызовите его в PHP-файле.
Также можно загрузить расширение через файл php.ini (см. проект для более подробной информации).
Пример создания счётчика высокой нагрузки (только для многопоточных систем):
$obj=new zqf();
$counter= $obj->autoadd(0,1,0);
echo $counter;
Создание системы «красных пакетов»:
Первый параметр — общая сумма красных пакетов, второй — количество красных пакетов, третий — тип пакета (0 — пакет с сюрпризом, 1 — обычный пакет).
Пакет с сюрпризом:
$hongb= $obj->hongbao(10,8);
Обычный пакет:
$hongb= $obj->hongbao(10,8,1);
var_dump($hongb);
Создание QR-кода:
$obj->savefile('https://www.baidu.com/s?wd=昌平香堂','./test.png',500);
$obj->savefile('https://www.baidu.com/s?wd=昌平香堂','./test.png',500,1);
Здесь первый параметр — URL, второй — путь сохранения, третий — ширина или высота QR-кода, четвёртый — прозрачность (по умолчанию — непрозрачный).
Расширение для сбора статистики времени выполнения PHP-скриптов
Скачайте Hiredis с GitHub:
wget https://github.com/redis/hiredis/archive/v0.13.3.tar.gz
Распакуйте архив:
tar zxvf v0.13.3.tar.gz
Перейдите в каталог hiredis-0.13.3:
cd hiredis-0.13.3
Скомпилируйте и установите:
make install```
Если возникает ошибка ```libhiredis.so.0.13: cannot open shared object file: No such file or directory in Unknown on line 0```, выполните следующие шаги:
1. Откройте файл /etc/ld.so.conf и добавьте строку ```/usr/local/lib```.
2. Выполните команду ```ldconfig```.
3. Скомпилируйте расширение:
```./phpize```
Настройте параметры:
```./configure --with-php-config=/usr/local/php/bin/php-config```
Установите расширение:
```make
make install```
Добавьте расширение в файл php.ini:
```extension=zqfHB.so```
В файле конфигурации zqfHB укажите параметры:
```[zqfHB]
zqfHB.slow_maxtime=10000(单位微妙1s=1000000us,改参数是页面加载超过这个时间会统计)
zqfHB.type=1(1代表redis 2代表memcache,由于memcache性能处理有点低,暂时不开放)
zqfHB.auth=123456(如果redis没有密码,此项不必配置,如果有密码,必须配置此项)
zqfHB.host=192.168.102.163
zqfHB.port=6379```
Использование:
Скопируйте все файлы из веб-каталога или другого каталога на сайт.
Запустите ```http://localhost/web/```.
Эффект:
См. изображения img1.png и img2.png.
**Консоль для веб-страниц**
Доступ к консоли: ```http://localhost/console/console.php```.
**Использование Hprose**
Получите данные:
```echo hprose::getInstance()->getdata();```
Доступ: ```http://localhost/index/hprose```.
**Общение**
Группа обмена опытом ZYS: 337937322.
**Лицензия**
Apache License Version 2.0 см. http://www.apache.org/licenses/LICENSE-2.0.html.
**Пожертвования**
Если вы цените мой труд, пожалуйста, поддержите меня материально. Ваша поддержка — моя главная мотивация.
Изображения:
pw.jpg: https://gitee.com/uploads/images/2017/1024/114925_967ed4c4_636453.jpeg
pay.png: http://git.oschina.net/qieangel2013/zys/raw/master/public/images/pay.png
Список проектов для пожертвований: https://github.com/qieangel2013/zys/wiki/%E9%A1%B9%E7%9B%AE%E6%8D%90%E8%B5%A0.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )