Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
Swoole Большинство функций можно использовать только в среде командной строки cli, сначала подготовьте среду Linux Shell. Вы можете использовать Vim, Emacs, PhpStorm или другие редакторы для написания кода и выполнения программы в командной строке со следующими инструкциями.
php /path/to/your_file.php
После, если в вашем коде нет инструкции echo, вывод на экран не будет, но на самом деле нижний слой уже прослушивает сетевой порт, ожидая клиента чтобы инициировать соединение. Используйте соответствующие клиентские инструменты и программы для подключения к серверу для тестирования.
По умолчанию, после запуска службу Swoole, можно завершить через CTRL+C , но будут проблемы, если окно закроется в это время, и его нужно запускаться в фоновом режиме. Для получения дополнительной информации см. Демонизация
Большинство примеров в кратком руководстве представляют собой шаблоны программирования в асинхронном стиле, и функции в примерах также могут быть реализованы в стиле сопрограммы, см. серверную часть (стиль сопрограммы).
Swoole Большинство предоставленных модулей можно использовать только в терминале командной строки cli. В настоящее время в среде PHP-FPM можно использовать только синхронные блокирующие клиенты.
server.php
//Создаем объект Server и прослушиваем порт 127.0.0.1:9501 $server = new Swoole\Server('127.0.0.1', 9501); //прослушивание события в процессе соединения $server->on('Connect', function ($server, $fd) { echo "Client: Connect.\n"; }); //прослушивание события получения данных $server->on('Receive', function ($server, $fd, $reactor_id, $data) { $server->send($fd, "Server: {$data}"); }); //прослушивание события закрытия соединения $server->on('Close', function ($server, $fd) { echo "Client: Close.\n"; }); //запускаем сервер $server->start();
Это создает TCP-сервер, прослушивающий локальный порт 9501. Его логика проста: когда клиент Socket отправляет по сети строку hello, сервер отвечает строкой Server: hello.
Server - это асинхронный сервер, поэтому программа пишется путем прослушивания событий. При возникновении соответствующего события нижний уровень будет вызывать указанную функцию. Например, обратный вызов события onConnect будет выполняться при поступлении нового TCP-соединения, а функция onReceive будет вызываться обратно, когда соединение отправляет данные на сервер.
php server.php
Запустите программу server.php. После успешного запуска вы можете использовать инструмент netstat, чтобы посмотреть, что порт 9501 прослушивается.
Затем вы можете использовать инструмент telnet/netcat для подключения к серверу.
telnet 127.0.0.1 9501
hello
Server: hello
udp_server.php
$server = new Swoole\Server('127.0.0.1', 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP); //прослушивание события получения данных $server->on('Packet', function ($server, $data, $clientInfo) { var_dump($clientInfo); $server->sendto($clientInfo['address'], $clientInfo['port'], "Server:{$data}"); }); //запускаем сервер $server->start();Copy to clipboardErrorCopied
В отличие от серверов TCP, серверы UDP не имеют концепции соединений. После запуска Сервера клиент может напрямую отправлять пакеты данных на порт 9502, контролируемый Сервером, без Подключения. Соответствующее событие onPacket.
php udp_server.php
UDP-сервер можно использовать для проверки соединения netcat -u.
netcat -u 127.0.0.1 9502 hello Server: hello
http_server.php
$http = new Swoole\Http\Server('0.0.0.0', 9501); $http->on('Request', function ($request, $response) { $response->header('Content-Type', 'text/html; charset=utf-8'); $response->end('<h1>Hello Swoole. #' . rand(1000, 9999) . '</h1>'); }); $http->start();Copy to clipboardErrorCopied
HTTP Серверу нужно обработать запрос, поэтому ему нужно только прослушивать событие onRequest. Это событие запускается при появлении нового запроса.
Приходит HTTP-запрос. Функция обратного вызова события имеет два параметра, один из которых является объектом $request, который содержит соответствующую информацию о запросе, например, запрошенные данные GET/POST.
Другой — это объект ответа, и запросить ответ можно, манипулируя объектом $response. $response-end() Метод означает вывод фрагмента HTML контента и завершение запроса.
php http_server.php
При использовании браузера Chrome для доступа к серверу будет сгенерирован дополнительный запрос, /favicon.ico, на который можно ответить кодом с ошибкой 404 .
$http->on('Request', function ($request, $response) { if ($request->server['path_info'] == '/favicon.ico' || $request->server['request_uri'] == '/favicon.ico') { $response->end(); return; } var_dump($request->get, $request->post); $response->header('Content-Type', 'text/html; charset=utf-8'); $response->end('<h1>Hello Swoole. #' . rand(1000, 9999) . '</h1>'); });Copy to clipboardErrorCopied
Applications can $request→server['request_uri']implement . Such as: http://127.0.0.1:9501/test/index/?a=1, URLrouting .
$http->on('Request', function ($request, $response) {
list($controller, $action) = explode('/', trim($request->server['request_uri'], '/'));
//?? $controller, $action ?????????????
(new $controller)->$action($request, $response);
});Copy to clipboardErrorCopied