hemiframe / php-websocket
PHP WebSocket 服务器和客户端库
1.7.1
2019-02-07 08:44 UTC
Requires
- php: >=7.0
README
简单的强大PHP WebSocket实现,适用于PHP
支持
- 多路径
- 检查来源
- 限制客户端
- 在关闭连接时发送状态码
- 发送自定义头
需求
PHP >= 7.0
安装
在 composer.json 中输入
{ "require": { "hemiframe/php-websocket": "~1.7" } }
或者在控制台运行: php composer.phar require hemiframe/php-websocket
如何运行演示?
打开 CMD 或终端并输入
php demo/server.php
之后你可以在浏览器中打开 demo/index.html
服务器示例
require_once('vendor/autoload.php'); $socket = new \HemiFrame\Lib\WebSocket\WebSocket("localhost", 8080); $socket->on("receive", function($client, $data) use($socket) { foreach ($socket->getClients() as $item) { /* @var $item \HemiFrame\Lib\WebSocket\Client */ if ($item->id != $client->id) { $socket->sendData($item, $data); } } }); $socket->startServer();
客户端示例
require_once('vendor/autoload.php'); $socket = new \HemiFrame\Lib\WebSocket\WebSocket('localhost', 8080); $socket->on("receive", function($client, $data) use($socket) { }); $client = $socket->connect(); if ($client) { $socket->sendData($client, "Message"); $socket->disconnectClient($client); }
文档
事件
$socket->on("connect", function(\HemiFrame\Lib\WebSocket\Client $client) { }); $socket->on("receive", function(\HemiFrame\Lib\WebSocket\Client $client, $data) { }); $socket->on("send", function(\HemiFrame\Lib\WebSocket\Client $client, $data) { }); $socket->on("ping", function(\HemiFrame\Lib\WebSocket\Client $client, $data) { }); $socket->on("pong", function(\HemiFrame\Lib\WebSocket\Client $client, $data) { }); $socket->on("disconnect", function(\HemiFrame\Lib\WebSocket\Client $client, $statusCode, $reason) { }); $socket->on("error", function($socket, $client, $phpError, $errorMessage, $errorCode) { });
方法
$socket->getSocket(); /** * Get connected clients * @return array */ $socket->getClients(); /** * Get connected clients, filtered by path * @return array */ $socket->getClientsByPath($path = "/"); $socket->getAllowedOrigins(); $socket->setAllowedOrigins($allowedOrigins); $socket->getMaxClients(); $socket->setMaxClients($maxClients); $socket->getBufferSize(); $socket->setBufferSize($bufferSize); $socket->getUserAgent(); $socket->setUserAgent($userAgent); $socket->setEnableLogging($enableLogging); $socket->create(); $socket->close(); $socket->setOption($socket, $level, $optname, $optval); $socket->bind($address, $port = 0); $socket->listen($backlog = 0); $socket->select(&$read, &$write, &$except, $backlog, $tv_usec = 0); $socket->accept(); $socket->write($socket, $message = null); $socket->recv($socket); $socket->read($socket); /** * Get last socket error code * Alias of socket_last_error * @return int */ $socket->getLastErrorCode(); /** * Get last socket error message * @return string */ $socket->getLastErrorMessage(); /** * Connect to websocket server. Send and validate handshake request. * @param string $path Send custom path to server * @param string $origin Send custom origin host to server * @return mixed Return client object when is successfully connected to server or FALSE when is not. */ $socket->connect($path = "/", $origin = null); /** * Run WebSocket server. * Create main socket. * Bind address and port. * Listens for a connection on a socket. * Call main processing loop */ $socket->startServer(); /** * Disconnect all clients and close main socket */ $socket->stopServer(); /** * Main processing loop. Check for new clients, incomming data, diconnected clients */ $socket->loop(); /** * Trigger event * @param string $name Event name * @param array $arguments Arguments for sending */ $socket->trigger($name, $arguments); /** * Subscribe for event. * @param string $name Event name * @param function $function Callback function */ $socket->on($name, $function); /** * Subscribe on event. Call only first time * @param string $name Event name * @param function $function Callback function */ $socket->one($name, $function); /** * Send data to client * @param object $client * @param string $data */ $socket->sendData($client, $data); /** * Disconnect client. You can send custom status code and reason * @param object $client * @param int $statusCode * @param string $reason * @return self */ $socket->disconnectClient($client, $statusCode = self::STATUS_CLOSE_NORMAL, $reason = null);