Инструменты пользователя

Инструменты сайта


rowset-definition

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
rowset-definition [2026/02/26 12:44] – [Раздел autoexec] madminrowset-definition [2026/02/26 14:15] (текущий) – [Раздел autoexec] madmin
Строка 375: Строка 375:
 === mode=socket === === mode=socket ===
 В этом режиме запрос вызывается по указанию сервера, через WebSocket. В этом режиме запрос вызывается по указанию сервера, через WebSocket.
-Для реализации такого способа необходим сервер, поддерживающий socket соединение, технологии PHP+Apache недостаточно. Например, на PHP посредством Ratchet+Для реализации такого способа необходим сервер, поддерживающий socket соединение, технологии PHP+Apache недостаточно. Например, на PHP такой сервер можно написать на Ratchet, но это будет отдельный сервис, работающий независимо от Apache.
  
-Клиент создает и держит с сервером продолжительное, заданное параметром **timeout** (30-300 секунд) http соединение. Сервер периодически, например раз в секунду, проверяет наличие интересующего клиента события. При возникновении события, возвращает клиенту строку **1** и завершается. Если за заданное **timeout** время событие не возникло, то серверное соединение завершается, ничего не сообщая клиенту. А клиент повторно создает новое соединение и ждет ответа. 
 <code> <code>
   <autoexec   <autoexec
     enabled="1|0"     enabled="1|0"
     request="<имя запроса>"     request="<имя запроса>"
-    mode="polling+    mode="socket
-    timeout="<время ожидания polling запроса>" +    url="<url socket соединения>" 
-    url="<url polling соединения>"+    pingtimeout="<периодичность отправки ping запросов для проверки соединения, в секундах>"
     ignoreerror="0|1"     ignoreerror="0|1"
   >   >
Строка 392: Строка 391:
   </autoexec>   </autoexec>
 </code> </code>
-  * url - http адрес polling соединения +  * url - адрес socket соединения 
-  * timeout время ожидания для polling соединения+  * pingtimeout - если параметр задан, то клиент будет периодически посылать сообщение ping серверу, для проверки соединения
   * параметры param - добавляются в url polling запроса   * параметры param - добавляются в url polling запроса
  
 +Пример реализации WebSocket сервера на Ratchet
 +<code>
 +<?php
 +require_once('.lss-init.php');
 +$path=pathRootConcat(
 + getCfg('path.root.extlib'),
 + 'Ratchet',
 + 'autoload.php'
 +);
 +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->clients = new \SplObjectStorage;
 +    }
 +
 +    public function onOpen(ConnectionInterface $conn) {
 + $queryString = $conn->httpRequest->getUri()->getQuery();
 + parse_str($queryString, $info);
 + $conn->info=$info;
 + $this->clients->attach($conn);
 + echo '- open'."\n";
 +    }
 +
 +    public function onClose(ConnectionInterface $conn) {
 + $this->clients->detach($conn);
 + echo '- close'."\n";
 +    }
 +
 +    public function onMessage(ConnectionInterface $from, $msg) {
 + if ($msg=='ping') {
 + $from->send('pong');
 + echo '- ping - pong'."\n";
 + }
 + }
 +
 +    public function onError(ConnectionInterface $conn, \Exception $e) {
 + $conn->close();
 + echo '- error'."\n";
 +    }
 +
 +    public function broadcast($msg) {
 + echo '- отправка сообщений всем пользователям'."\n";
 + foreach ($this->clients as $client) {
 + $client->send($msg);
 + }
 +    }
 +}
 +
 +$loop = Factory::create();
 +$serverComponent = new MyServer();
 +
 +$loop->addPeriodicTimer(5, function() use ($serverComponent) {
 +    $serverComponent->broadcast('1');
 +});
 +
 +$webSock = new React\Socket\Server('0.0.0.0:8080', $loop);
 +
 +$server = new Ratchet\Server\IoServer(
 +    new HttpServer(
 +        new WsServer($serverComponent)
 +    ),
 +    $webSock,
 +    $loop
 +);
 +
 +echo "\n".'WebSocket запущен'."\n";
 +$loop->run();
 +</code>
rowset-definition.1772099045.txt.gz · Последнее изменение: 2026/02/26 12:44 — madmin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki