werkraum/websocket-provider

在TYPO3环境中运行具有可扩展服务器逻辑的websocket服务器。

安装: 14

依赖: 0

建议: 0

安全: 0

星级: 0

关注者: 1

分支: 0

开放问题: 0

类型:typo3-cms-extension

0.3.1 2023-02-20 08:53 UTC

This package is auto-updated.

Last update: 2024-09-24 17:20:19 UTC


README

提供基本的设置,在TYPO3中运行Ratchet WebSocket服务器。

目前仅适用于*nix系统

composer req werkraum/websocket-provider

typo3cms websocket:start

路由和组件

组件

在您的扩展中实现Ratchet接口 Ratchet\MessageComponentInterface。这将作为您的逻辑入口点。

class YourMessageComponent implements Ratchet\MessageComponentInterface
{
    // interface methods with your logic go here
}

将您的组件标记为公共,以便在内部使用Symfony依赖注入。用websocket.component标记您的组件以将其注册到WebSocket提供者。

配置/Services.yaml

# default service setup goes here

services:
  Vendor\Extension\WebSocket\YourMessageComponent:
    public: true
    tags: ['websocket.component']

路由

使用Symfony路由提供多租户。

您可以让您的组件实现接口CustomRouteInterface。返回带有前导斜杠的自定义路由路径(例如/socket.io/my_component)。

Vendor\Extension\MyComponent的默认路由为/Vendor_Extension_MyComponent

请注意,您的WebSocket路由可能由您为web服务器配置设置的任何内容进行前缀。在我的情况下,这通常是/socket.io。您可以在设置中设置此全局前缀。然后,该前缀将添加到每个组件路由之前,包括使用此扩展的第三方组件。

循环

如果需要周期性定时器或处理信号,可以实现接口ConfigureLoopInterface。您将作为参数获得循环。已经注册了SIGTERM和SIGINT信号来关闭服务器。

配置

有关所有配置选项,请参阅ext_conf_template.txt

命令

演示

Ratchet提供了一个简单的echo组件。您可以通过Symfony DI注册它。

任何 配置/Services.yaml

Ratchet\Server\EchoServer:
  public: true
  tags: ['websocket.component']

安全

身份验证

当前的前端和后端用户会话作为UserAspects添加到连接中。同时添加连接的ID。

$conn->feUser
$conn->beUser

当未进行身份验证时,不会拒绝连接。此外,仅在打开连接时检查身份验证。

速率限制

提供了一个基本的限制器,可在设置中进行配置。更复杂的速率限制可能需要由您的web服务器执行。

服务器配置

需要ext-jsonext-pcntlext-posix来检查服务器状态的cli命令。

NGINX

Laravel有一些关于如何设置NGINX进行WebSocket的良好文档。

https://beyondco.de/docs/laravel-websockets/basic-usage/ssl#usage-with-a-reverse-proxy-like-nginx

DDEV

打开端口。通过DDEV配置web_extra_exposed_ports或自定义docker-compose文件。

docker-compose.websockets.yaml

version: '3.6'
services:
  web:
    ports:
      - "18080"

端口和URL部分/socket.io可以根据您的需求进行调整。我建议将扩展设置route_prefix设置为WebSocket配置中设置的URL部分。

以下是需要添加到web服务器配置中的代理传递配置。它使用自定义URL部分来区分WebSocket和常规HTTP请求。这很好地与现有的web服务器配置集成。Laravel文档有一个没有URL部分的Nginx设置。

请记住在Web服务器配置中删除#ddev-generated行,否则在DDEV重启后您的更改将被覆盖。

Apache

<Location "/socket.io">
    LoadModule proxy_wstunnel_module /usr/lib/apache2/modules/mod_proxy_wstunnel.so
    ProxyPass "ws://:18080/socket.io"
    ProxyPassReverse "ws://:18080/socket.io"
    ProxyPreserveHost On
    RequestHeader set Upgrade "websocket"
    RequestHeader set Connection "Upgrade"
</Location>

NGINX

location /socket.io {
    proxy_pass https://:18080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $host;
}

谢谢

许多想法和灵感来自https://freek.dev/1228-introducing-laravel-websockets-an-easy-to-use-websocket-server-implemented-in-php