本篇文章介绍如何在 PHP 中实现 socket.io。
PHP 套接字输入输出
socket.io 库支持客户端和服务器之间的双向、低延迟和基于事件的通信。 可以在这里找到官方的 socket.io API,它是使用 Node.js 实现的。
socket.io 没有直接用 PHP 实现,因为它不是用 PHP 编写的。 我们可以使用 PHP 中的 Elephant.io 等 API,它为我们实现了 PHP 中的 socket.io。
Elephant.io 是一个用 PHP 编写的粗糙的 WebSocket 客户端,可以简化服务器和客户端之间的通信。 Elephant.io 至少需要 PHP 5.4 和 OpenSSL。
Elephant.io 已获得 MIT 许可。 Elephant.io 中使用的 Elephant.io 或 Socket.io 引擎的内置引擎是:
- Socket.io 5.x
- Socket.io 4.x
- Socket.io 3.x
- Socket.io 2.x
- Socket.io 1.x
- Socket.io 0.x
如何安装 Elephant IO
elephant.io 在 GitHub 上提供,可以使用 Composer 安装。 首先,确保您的 PHP 中安装了 Composer,如果没有,请先安装 Composer,然后按照下面描述的步骤操作。
- 转到composer链接。
- 单击下载选项。
- 下载 Composer-Setup.exe 文件。
- 运行 Composer-Setup.exe 文件。
- 为所有用户安装。
- 选择 php.exe 文件的路径。 点击下一步。
- 不要选择代理并单击下一步。
- 单击下一页上的安装。
- 安装完成后,单击“下一步”,然后单击“完成”。
以上步骤会在我们的Windows系统中安装好Composer,可以在cmd中运行 composer
命令查看。
现在我们需要用 php 命令运行 composer.phar
来安装 elephant.io,并在当前目录下安装 Composer.phar; 使用以下命令。
php -r "readfile('https://getcomposer.org/installer');" | php
此命令的输出将是:
C:\Users\Sheeraz>php -r "readfile('https://getcomposer.org/installer');" | php
All settings correct for using Composer
Downloading...
Composer (version 2.4.2) successfully installed to: C:\Apache24\htdocs\composer.phar
Use it: php composer.phar
C:\Apache24\htdocs>
安装 Composer 和 Composer.phar 后,让我们安装 Elephant.io。 运行以下命令。
php composer.phar require elephantio/elephant.io
上面的命令将安装 elephant.io,如果它抛出版本不兼容错误,则使用以下命令直接从 composer 安装它。
composer require elephantio/elephant.io:*
Elephant IO 安装的输出将是:
一旦安装了 Elephant IO 包,我们就可以使用它与套接字服务器进行通信。 这是一个例子。
<?php
require( __DIR__ . '/elephantio/elephant.io/lib/ElephantIO/Client.php');
use ElephantIO\Client as ElephantIOClient;
$Elephant_Client = new ElephantIOClient('http://localhost:8000', 'socket.io', 1, false, true, true);
$Elephant_Client->init();
$Elephant_Client->emit('action', 'delftstack');
$Elephant_Client->close();
echo 'trying to send `foo` to the event named action';
?>
在运行此代码之前,我们可能需要在端口 8000 启动服务器。在 cmd 中运行以下命令。
php -S localhost:8000
上面的代码将与套接字服务器通信,将数据 foo 发送到名为 action 的事件。 上述代码的输出是:
trying to send `foo' to the event called action
如果通信时间超过 30 秒,代码将抛出如下致命错误:
Fatal error: Maximum execution time of 30 seconds exceeded in C:\Apache24\htdocs\vendor\elephantio\elephant.io\lib\ElephantIO\Client.php on line 326
Elephant.io 不包含文档,但它提供了一些示例,我们可以从中了解套接字服务器通信。