componenta/websocket-server 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

componenta/websocket-server

Composer 安装命令:

composer require componenta/websocket-server

包简介

WebSocket server, protocol, socket, and connection primitives for Componenta

README 文档

README

WebSocket server, protocol, socket, and connection primitives for Componenta. The package contains the low-level server runtime and application contracts; componenta/websocket-app connects it to the Componenta application boot process.

Installation

composer require componenta/websocket-server

The package requires PHP ^8.4, componenta/config, componenta/http, psr/clock, and PSR-11.

Application Contract

Implement WebSocketApplicationInterface to handle lifecycle events:

use Componenta\WebSocket\Application\WebSocketApplicationInterface;
use Componenta\WebSocket\Application\Error\WebSocketErrorContextInterface;
use Componenta\WebSocket\Connection\ConnectionInterface;
use Componenta\WebSocket\Protocol\CloseInfo;
use Componenta\WebSocket\Protocol\Message;

final class EchoApplication implements WebSocketApplicationInterface
{
    public function connected(ConnectionInterface $connection): void {}

    public function received(ConnectionInterface $connection, Message $message): void
    {
        $connection->send($message);
    }

    public function disconnected(ConnectionInterface $connection, CloseInfo $close): void {}

    public function failed(WebSocketErrorContextInterface $context): void {}
}

Connections expose immutable connection data and controlled write methods through ConnectionInterface:

API Meaning
$connection->id Framework connection id.
$connection->remoteAddress Remote socket address.
$connection->request Parsed WebSocket handshake request.
$connection->context Mutable connection context object.
$connection->state Current connection state.
`$connection->send(Message string $message)`
$connection->sendText(string $payload) Queue a text message.
$connection->sendBinary(string $payload) Queue a binary message.
$connection->close(int $code, string $reason) Queue a close frame and move the connection toward closing.

Write methods return SendResult. Check $result->accepted before assuming the payload was queued; rejected results include a $reason and the current $queuedBytes value.

Message Routing

For applications that only need message dispatch, use RoutedWebSocketApplication with a MessageRouterInterface:

use Componenta\WebSocket\Application\CallableMessageRouter;
use Componenta\WebSocket\Application\InMemoryConnectionRegistry;
use Componenta\WebSocket\Application\RoutedWebSocketApplication;

$app = new RoutedWebSocketApplication(
    new CallableMessageRouter(static function ($connection, $message): void {
        $connection->send($message);
    }),
    new InMemoryConnectionRegistry(),
);

RoutedWebSocketApplication adds connections to the registry on connect, delegates incoming messages to the router, and removes connections on disconnect. Application exceptions are reported through SafeWebSocketApplicationInvoker, which calls WebSocketApplicationInterface::failed() instead of letting handler failures escape the server loop.

Configuration

WebSocketOptions::fromConfig() reads keys from Componenta\WebSocket\Config\ConfigKey:

Key Default
HOST 127.0.0.1
PORT 8080
PATH /ws
ALLOWED_ORIGINS ['*']
MAX_FRAME_PAYLOAD_SIZE 1048576
MAX_MESSAGE_PAYLOAD_SIZE 1048576
HEARTBEAT_INTERVAL_MS 30000
PONG_TIMEOUT_MS 10000
MAX_CONNECTIONS 1024

Additional keys control outgoing buffer size, pending handshakes, idle timeout, shutdown drain timeout, select timeout, and listen backlog.

Registered Services

Componenta\WebSocket\ConfigProvider registers defaults for:

  • WebSocketServerInterface
  • WebSocketOptionsInterface
  • HandshakeInterface
  • ConnectionFactoryInterface
  • EventLoopInterface
  • SocketListenerFactoryInterface
  • SocketSelectorInterface
  • WebSocketApplicationResolverInterface
  • WebSocketApplicationInvokerInterface

The default server uses stream sockets and a select-based event loop.

Boundary

This package does not provide application entry points, config/websocket.php loading, or Componenta bootloader registration. Use componenta/websocket-app for Componenta application integration.

Supervisor contracts such as WorkerInterface, WorkerRegistryInterface, and WorkerMessageBusInterface are declared here because they describe the socket server runtime. A concrete multi-process supervisor is an application/deployment concern.

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-06-14

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固