kyrne/websocket
集成的Pusher替代品。
Requires
- cboden/ratchet: ^0.4.1
- clue/redis-react: ^2.3
- doctrine/dbal: ^2.9
- evenement/evenement: ^2.0|^3.0
- facade/ignition-contracts: ^1.0
- flarum/core: ^1.0.2
- guzzlehttp/promises: ^1.0
- guzzlehttp/psr7: ^1.5|^2.0
- illuminate/broadcasting: ^8.0
- illuminate/console: ^8.0
- illuminate/http: ^8.0
- illuminate/queue: ^8.0
- illuminate/routing: ^8.0
- illuminate/support: ^8.0
- pusher/pusher-php-server: ^7.0
- react/promise: ^2.0
- symfony/http-kernel: ^4.0|^5.0
- symfony/psr-http-message-bridge: ^1.1|^2.0
Replaces
- dev-master
- 3.3.0
- 3.2.0
- 3.1.1
- 3.1.0
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.8.5
- 2.8.4
- 2.8.3
- 2.8.2
- 2.8.1
- 2.8.0
- 2.7.0
- 2.6.0
- 2.5.0
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.0
- 2.2.0
- 2.1.1
- 2.1.0
- 2.0.0
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0
- dev-dependabot/npm_and_yarn/js/minimist-and-mkdirp-1.2.8
- dev-dependabot/npm_and_yarn/js/global-modules-path-and-webpack-cli--removed
- dev-dependabot/npm_and_yarn/js/json5-and-babel-loader-and-webpack-and-webpack-cli-2.2.2
- dev-dependabot/npm_and_yarn/js/decode-uri-component-0.2.2
- dev-dependabot/npm_and_yarn/js/minimatch-3.1.2
- dev-dependabot/npm_and_yarn/js/loader-utils-1.4.2
- dev-dependabot/npm_and_yarn/js/ajv-6.12.6
- dev-analysis-M1daaK
- dev-analysis-1b7K4v
- dev-analysis-M1ayDK
- dev-mithril-2-update
- dev-extiverse-instructions
This package is auto-updated.
Last update: 2024-09-04 04:03:07 UTC
README
关于
Websockets是flarum/pusher的替代品,它是一个本地托管版本,功能完全相同。对于大型论坛,Pusher可能非常昂贵,并且如果必须遵守GDPR,可能会造成严重问题。此WebSocket实现完全基于PHP,无需安装额外的软件或工具。
扩展兼容性
目前,WebSocket支持以下扩展:
- fof/reactions
- fof/gamification
- fof/polls
- 您所享受的正常Pusher行为(新帖子、讨论和通知)
安装
请遵循Extiverse的安装说明,见此处:https://extiverse.com/premium/subscriptions
设置
设置此扩展有几个选项,首先,请确保它在您的论坛上已安装,但请不要立即启用它,我们还有一些准备工作要做。如果您遇到任何问题,或者需要有人引导您完成安装步骤,请毫不犹豫地通过Discord @Kyrne#9728联系我,我将很乐意帮助!我还在下面包括了故障排除部分,其中包含了一些常见问题的解决方案。再次提醒,如果您有任何需要帮助的问题,请随时联系我。
选项1 - 带SSL的代理(推荐)
使用此设置选项,我们将使用Nginx将WebSocket请求代理到WebSocket服务器。
步骤1
找到您的Nginx服务器配置文件,通常位于此处:/etc/nginx/sites-enabled/{your_site}。
注意:如果您通过2个Nginx实例双向代理连接,请使用最下游(第一个)实例。
步骤2
在您喜欢的编辑器(nano、vim等)中打开步骤1中的服务器块,现在它应该看起来像这样
server { root /var/www/flarum/public; index index.php index.html index.htm index.nginx-debian.html; server_name your.domain; include /var/www/flarum/.nginx.conf; error_page 404 = @notfound; location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; } location ~ /\.ht { deny all; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/your.domain/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/your.domain/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = your.domain) { return 301 https://$host$request_uri; } # managed by Certbot server_name your.domain; listen 80; return 404; # managed by Certbot }
步骤3
在SSL服务器块内部添加以下内容
# Your default configuration comes here... location /app { proxy_pass http://127.0.0.1:2083; proxy_read_timeout 60; proxy_connect_timeout 60; proxy_redirect off; # Allow the use of websockets proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }
您现在可以保存并关闭此文件。这些配置将告诉Nginx有关您的WebSocket服务器以及如何向它发送请求。
我们现在完成了Nginx配置!最困难的部分已经过去了!
步骤4
完成所有上述步骤后,您现在可以启用扩展。启用后,将出现设置,请确保开启“反向代理支持”开关,其他保持不变。然后保存您的设置。
步骤5
您现在可以启用WebSocket服务器!请跳转到该部分。
选项2 - WebSocket服务器处理SSL
对于此方法,您需要知道您的域(或WebSocket服务器将要托管在该域上)的全链式SSL证书的位置以及相同域的私钥。花点时间找到这些文件,并将路径抄下来。如果您不知道这些文件在哪里,请查看您的Nginx或Apache配置文件,它们通常包含在这些文件中。如果您使用letsencrypt,它们通常可以在/etc/letsencrypt/live/your.domain
文件夹中找到。
注意:这些文件还必须可以被您的Web服务器(通常为
www-data
)读取。
步骤1 - 端口转发
由于您不会使用您的Web服务器来路由流量,您需要打开一个端口,以便您的网站访客可以连接到WebSocket服务器。如果您在DigitalOcean等VPS上运行服务器,只需执行一条命令来打开端口即可。对于Ubuntu,运行sudo ufw allow {端口}
。如果您在自己的家中或通过您控制的路由器运行服务器,请确保该端口指向您的Web服务器。您可以在互联网上查找有关如何为特定路由器转发端口的指南。
注意:默认端口为
2083
。
如果您使用Cloudflare,请注意,在基本计划中,只有某些端口可以通过他们的网络。这些端口是
- 2053
- 2083
- 2087
- 2096
- 8443
如果您决定将端口更改为除2083
之外的其他端口,请确保在管理员面板的扩展设置中指定。
步骤 2 - SSL证书和私钥
现在请在管理员面板中启用此扩展。一旦出现设置,填写SSL证书(本地证书)和私钥(本地私钥)的路径。如果您的证书是自签名的,请确保开启标有“自签名证书支持”的开关。如果您的密钥由密码加密,请在设置中相应的字段中输入它。然后保存您的设置。
步骤 3 - 完成
您的设置应该已完成,现在您可以开启WebSocket服务器了!跳转到该部分。
选项 3 - 不安全的WebSocket服务器
请谨慎使用此方法。此方法仅适用于(并且仅可能用于)不使用https的论坛。理想情况下,您的论坛应该使用https,因为您正在处理敏感用户数据,例如密码。如果您必须使用此方法,它是最简单的设置方式。您只需安装它,然后按照选项#2中的步骤1进行操作。然后运行WebSocket服务器。
启动WebSocket服务器
启动服务器是最简单的部分,只需导航到您的Flarum根目录并运行php flarum websocket:serve
。服务器将占用终端会话,这并不是理想的。如果您想将进程守护化,请查阅如何使用nohup
或类似的方法。
注意:我建议在守护化之前先测试您的设置。
验证成功的设置
一旦您完成了所有安装步骤并且您的WebSocket服务器正在运行,此时一切应该正常工作。然而,我建议您验证一切是否正常工作。这最容易通过开启调试模式来实现。一旦开启调试模式,打开浏览器开发者工具并导航到控制台,然后刷新页面。如果一切正常,您应该看到类似以下输出:
["State changed","initialized -> connecting"]
["Connecting",{"transport":"ws","url":"wss://your.domain:port/app/ekYx3xmU5ECWzglOnF9u83iHS6ztClH1
?protocol=7&client=js&version=5.1.1&flash=false"}]
["State changed","connecting -> connected with new socket ID 696199201.622665801"]
["Event sent",{"event":"pusher:subscribe","data":{"auth":"","channel":"public"}}]
["Event recd",{"event":"pusher_internal:subscription_succeeded","channel":"public"}]
["No callbacks on public for pusher:subscription_succeeded"]
如果您看到此输出,客户端工作正常,让我们测试后端。
在启动WebSocket服务器后,您将能够看到所有建立的连接和发送的事件。您需要做的是在论坛上发一篇新帖,并查看WebSocket服务器的控制台输出。一旦该帖创建,您应该看到控制台输出中类似以下内容:
Connection id 213252186.960942107 sending message {"channel":"public","event":"newPost","data":"{\"postId\":158,\"discussionId\":43,\"tagIds\":[1]}"}
如果您的客户端和服务器看起来与这些类似,恭喜!一切工作正常,您已全部完成!
如果您看到错误或其他输出,请转到故障排除部分。
故障排除
遗憾的是,这个扩展非常复杂,设置过程中可能存在许多问题。每个服务器和设置都是不同的,可能会带来新的独特挑战。正如我之前所说,如果您遇到自己无法解决的问题,或者需要有人帮助您解决,请随时在Discord上联系我 @Kyrne#9728。
"无法监听tcp://0.0.0.0:{端口号}"
这通常意味着您尝试用于WebSocket服务器的端口号已被您机器上的其他进程占用。只需在扩展设置中更改您要使用的端口号即可。别忘了在上述步骤中(例如,Nginx代理转发端口)更新使用此端口号所做的任何配置。
"ERR_SSL版本或加密不匹配"
此错误通常是由于SSL证书和私钥不匹配或用于错误的域名造成的。如果您没有使用完整的证书链,也可能发生此错误。请确保私钥和证书路径正确,并且适用于正确的域名,并且您使用了完整的证书链。
"WebSocket在建立连接之前已关闭。"
WebSocket服务器无法使用双重代理。请确保将请求转发到WebSocket服务器的Nginx实例是最下游的(最接近用户的)。同时,确保WebSocket服务器正在运行且在正确的端口。
404错误或“ERROR:在页面加载过程中,连接到{地址}被中断”
如果您使用代理设置,请确保Nginx正在将连接代理到正确的端口号以及IP(127.0.0.1对应同一设备)。如果您使用端口转发方法,请确保端口已打开。在运行Web服务器时,使用类似开放端口检查器的工具来查看端口是否已打开。如果没有,请仔细检查您的端口转发设置,或者尝试使用不同的端口。
426、400或任何500错误
这些问题可能更复杂,并且在不同设置中其原因各不相同。请通过Discord @Kyrne#9728联系我,我将帮助您解决具体问题。
结语
非常感谢您通过订阅支持我的扩展开发工作。如果您希望在未来看到任何功能,请与我联系,我将尽力使您的请求成为现实。
照顾好自己,亲爱的Flarum爱好者!