initphp/socket

Socket 服务器-客户端库

1.0 2022-03-18 07:02 UTC

This package is auto-updated.

Last update: 2024-09-16 18:20:02 UTC


README

PHP Socket (TCP, TLS, UDP, SSL) 服务器/客户端库

Latest Stable Version Total Downloads Latest Unstable Version License PHP Version Require

要求

  • PHP 7.4 或更高版本
  • PHP Sockets 扩展

安装

composer require initphp/socket

使用方法

支持的类型

  • TCP
  • UDP
  • TLS
  • SSL

工厂

\InitPHP\Socket\Socket::class 允许您轻松创建 socket 服务器或客户端。

Socket::server()

public static function server(int $handler = Socket::TCP, string $host = '', int $port = 0, null|string|float $argument = null): \InitPHP\Socket\Interfaces\SocketServerInterface
  • $handler : Socket::SSL, Socket::TCP, Socket::TLSSocket::UDP
  • $host : 识别 socket 主机。如果未定义或留空,将抛出错误。
  • $port : 识别 socket 端口。如果未定义或留空,将抛出错误。
  • $argument : 此值将作为 3 个参数发送到处理器构造函数。
    • SSL 或 TLS = (float) 定义超时时间。
    • UDP 或 TCP = (string) 定义 socket 使用的协议族。 "v4", "v6" 或 "unix"

Socket::client()

public static function client(int $handler = self::TCP, string $host = '', int $port = 0, null|string|float $argument = null): \InitPHP\Socket\Interfaces\SocketClientInterface
  • $handler : Socket::SSL, Socket::TCP, Socket::TLSSocket::UDP
  • $host : 识别 socket 主机。如果未定义或留空,将抛出错误。
  • $port : 识别 socket 端口。如果未定义或留空,将抛出错误。
  • $argument : 此值将作为 3 个参数发送到处理器构造函数。
    • SSL 或 TLS = (float) 定义超时时间。
    • UDP 或 TCP = (string) 定义 socket 使用的协议族。 "v4", "v6" 或 "unix"

方法

connection() : 初始化 socket 连接。

public function connection(): self;

disconnect() : 终止连接。

public function disconnect(): bool;

read() : 从 socket 读取数据。

public function read(int $length = 1024): ?string;

write() : 将数据写入 socket

public function write(string $string): ?int;

服务器方法

live() :

public function live(callable $callback): void;

wait() :

public function wait(int $second): void;

TLS 和 SSL 的特殊方法。

TLS 和 SSL 工作方式类似。

您可以从 TLS 和 SSL 套接字使用一些附加方法。

timeout() : 定义当前的超时时间。

public function timeout(int $second): self;

blocking() : 设置当前的模式。

public function blocking(bool $mode = true): self;

crypto() : 在连接的 socket 上打开或关闭加密。

public function crypto(?string $method = null): self;

$method 的可能值有;

  • "sslv2"
  • "sslv3"
  • "sslv23"
  • "any"
  • "tls"
  • "tlsv1.0"
  • "tlsv1.1"
  • "tlsv1.2"
  • NULL

option() : 定义 SSL 和 TLS 的连接选项。见:https://php.ac.cn/manual/en/context.ssl.php

public function option(string $key, mixed $value): self;

Socket 服务器

示例

require_once "../vendor/autoload.php";
use \InitPHP\Socket\Socket;
use \InitPHP\Socket\Interfaces\SocketServerInterface;

$server = Socket::server(Socket::TLS, '127.0.0.1', 8080);
$server->connection();

$server->live(function (SocketServerInterface $socket) {
    switch ($socket->read()) {
        case 'exit' : 
            $socket->write('Goodbye!');
            return;
        case 'write' :
            $socket->write('Run write command.');
        break;
        case 'read' :
            $socket->write('Run read command.');
        break;
        default: return;
    }
});

Socket 客户端

示例

require_once "../vendor/autoload.php";
use \InitPHP\Socket\Socket;

$client = Socket::client(Socket::SSL, 'smtp.gmail.com', 465);

$client->option('verify_peer', false)
    ->option('verify_peer_name', false);

$client->connection();

$client->write('EHLO [127.0.0.1]');

echo $client->read();

在上面的示例中,创建了一个简单的 smtp 连接到 gmail。

致谢

许可

版权 © 2022 MIT 许可证