rowset-definition
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| rowset-definition [2026/02/25 19:56] – [Раздел autoexec] madmin | rowset-definition [2026/02/26 14:15] (текущий) – [Раздел autoexec] madmin | ||
|---|---|---|---|
| Строка 317: | Строка 317: | ||
| </ | </ | ||
| </ | </ | ||
| + | * url - http адрес polling соединения | ||
| + | * timeout - время ожидания для polling соединения | ||
| + | * параметры param - добавляются в url polling запроса | ||
| + | **Пример реализации polling сервиса на PHP** | ||
| + | < | ||
| + | <?php | ||
| + | class ServiceAutoExecPolling extends ServiceController{ | ||
| + | public function getParams() { | ||
| + | $result=array(); | ||
| + | $result[' | ||
| + | $result[' | ||
| + | return $result; | ||
| + | } | ||
| + | |||
| + | /** Формирование результата запроса | ||
| + | * | ||
| + | * @param array $params параметры | ||
| + | * @return string результат | ||
| + | */ | ||
| + | public function getResult($params) { | ||
| + | $result=''; | ||
| + | $timeout=$params[' | ||
| + | // | ||
| + | ini_set(' | ||
| + | |||
| + | for($i=0; $i< | ||
| + | // | ||
| + | echo ''; | ||
| + | |||
| + | if ($this-> | ||
| + | $result=1; | ||
| + | break; | ||
| + | } | ||
| + | sleep(1); | ||
| + | } | ||
| + | return $result; | ||
| + | } | ||
| + | |||
| + | /** Проверка возникновения события | ||
| + | * | ||
| + | * @return boolean наличие интересующего клиента события | ||
| + | */ | ||
| + | protected function test() { | ||
| + | return false; | ||
| + | } | ||
| + | } | ||
| + | return new ServiceAutoExecPolling(); | ||
| + | </ | ||
| + | Некоторые важные особенности реализации для PHP: | ||
| + | * На входе в сервис автоматически приходит параметр timeout - время выполнения в секундах. Под него сервис должен подстроиться | ||
| + | * Необходимо предотвратить остановку работы PHP скрипта Apache по max_execution_time, | ||
| + | * Необходимо останавливать PHP скрипт при разрыве соединения с клиентом. Для этого надо тестировать наличие соединения, | ||
| + | * При возникновении события надо послать клиенту 1 и остановить выполнение PHP скрипта | ||
| + | * При превышении времени необходимо остановить работу PHP скрипта, | ||
| + | |||
| + | === mode=socket === | ||
| + | В этом режиме запрос вызывается по указанию сервера, | ||
| + | Для реализации такого способа необходим сервер, | ||
| + | |||
| + | < | ||
| + | < | ||
| + | enabled=" | ||
| + | request="< | ||
| + | mode=" | ||
| + | url="< | ||
| + | pingtimeout="< | ||
| + | ignoreerror=" | ||
| + | > | ||
| + | <param name="< | ||
| + | ... | ||
| + | <param name="< | ||
| + | </ | ||
| + | </ | ||
| + | * url - адрес socket соединения | ||
| + | * pingtimeout - если параметр задан, то клиент будет периодически посылать сообщение ping серверу, | ||
| + | * параметры param - добавляются в url polling запроса | ||
| + | |||
| + | Пример реализации WebSocket сервера на Ratchet | ||
| + | < | ||
| + | <?php | ||
| + | require_once(' | ||
| + | $path=pathRootConcat( | ||
| + | getCfg(' | ||
| + | ' | ||
| + | ' | ||
| + | ); | ||
| + | require_once($path); | ||
| + | |||
| + | use Ratchet\MessageComponentInterface; | ||
| + | use Ratchet\ConnectionInterface; | ||
| + | use Ratchet\Http\HttpServer; | ||
| + | use Ratchet\WebSocket\WsServer; | ||
| + | use Ratchet\Server\IoServer; | ||
| + | use React\EventLoop\Factory; | ||
| + | |||
| + | class MyServer implements MessageComponentInterface { | ||
| + | protected $clients; | ||
| + | |||
| + | public function __construct() { | ||
| + | $this-> | ||
| + | } | ||
| + | |||
| + | public function onOpen(ConnectionInterface $conn) { | ||
| + | $queryString = $conn-> | ||
| + | parse_str($queryString, | ||
| + | $conn-> | ||
| + | $this-> | ||
| + | echo '- open' | ||
| + | } | ||
| + | |||
| + | public function onClose(ConnectionInterface $conn) { | ||
| + | $this-> | ||
| + | echo '- close' | ||
| + | } | ||
| + | |||
| + | public function onMessage(ConnectionInterface $from, $msg) { | ||
| + | if ($msg==' | ||
| + | $from-> | ||
| + | echo '- ping - pong' | ||
| + | } | ||
| + | } | ||
| + | |||
| + | public function onError(ConnectionInterface $conn, \Exception $e) { | ||
| + | $conn-> | ||
| + | echo '- error' | ||
| + | } | ||
| + | |||
| + | public function broadcast($msg) { | ||
| + | echo '- отправка сообщений всем пользователям' | ||
| + | foreach ($this-> | ||
| + | $client-> | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | $loop = Factory:: | ||
| + | $serverComponent = new MyServer(); | ||
| + | |||
| + | $loop-> | ||
| + | $serverComponent-> | ||
| + | }); | ||
| + | |||
| + | $webSock = new React\Socket\Server(' | ||
| + | |||
| + | $server = new Ratchet\Server\IoServer( | ||
| + | new HttpServer( | ||
| + | new WsServer($serverComponent) | ||
| + | ), | ||
| + | $webSock, | ||
| + | $loop | ||
| + | ); | ||
| + | |||
| + | echo " | ||
| + | $loop-> | ||
| + | </ | ||
rowset-definition.1772038561.txt.gz · Последнее изменение: 2026/02/25 19:56 — madmin
