idimensionz / sassy
由“自处理”消息驱动的可扩展WebSocket应用服务器
v0.1.0-alpha
2022-02-08 04:35 UTC
Requires
- php: ^7.4||^8
- ext-json: *
- cboden/ratchet: ^0.4
- idimensionz/common: ^1.0
- symfony/config: ^6.0
- symfony/console: ^6.0
- symfony/dependency-injection: ^6.0
- symfony/event-dispatcher: ^6.0
- symfony/proxy-manager-bridge: ^6.0
- symfony/uid: ^6.0
- symfony/yaml: ^6.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.5
- phake/phake: ^3.1
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^7.5||^8||^9
This package is auto-updated.
Last update: 2024-09-09 21:15:23 UTC
README
Gitlab: https://gitlab.com/idimensionz/sassy
需求
- PHP 7.4或更高版本
- Composer
安装说明
- 克隆存储库
- 运行
composer install以安装依赖项
启动WebSocket服务器
如果您想在服务器控制台看到调试输出,请设置SASSY_SERVER_DEBUG=1
export SASSY_SERVER_DEBUG=1
运行
php bin/websocket-server.php
示例客户端应用程序
从网页浏览器JS控制台
您可以从网页浏览器JS控制台直接测试WebSocket服务器,运行以下代码(即从开发控制台)
注意:您需要至少在2个浏览器标签页/窗口中运行此代码,才能看到两个“客户端”之间的消息流动。
var conn = new WebSocket('ws://:8080'); conn.onopen = function(e) { console.log("连接已建立!"); };
let jsonMessage = {messageType: "iDimensionz\AppServer\Message\Base\TextMessage",uniqId:1,message:"hello"};
conn.send(JSON.stringify(jsonMessage));
尝试使用我们用ReactJS构建的示例聊天客户端
https://gitlab.com/idimensionz/sassy-example-chat
设计方法
- 消息知道如何通过在服务器上处理消息来自“自处理”。
- “服务消息”可以访问服务类提供的功能
- 例如,Channel消息允许连接调用TopicService上的函数,如创建新主题或列出现有主题。
- 内置通道管理器(默认在服务器启动时创建“通用”主题)
- 通过事件/订阅器扩展,允许开发人员轻松地将“钩子”插入到服务器各个部分
用途
一些关于如何使用此代码的思路...
- 聊天服务器
- 主题可以是“通道”。
- TextMessage可用于基本文本消息。
- 可以创建新的消息类型,用于图像、视频、表情符号等。
- “存在”
- 让连接指示其状态(例如,请勿打扰、离开等)
- 点对点通信(音频、视频)
- 交互式游戏服务器(卡牌游戏、桌面游戏等)
- 为游戏内的操作创建新的消息类型
- 分布式处理
- 创建可以处理从服务器发送的数据有效负载的客户端应用程序。
- 用WebSocket客户端替换API客户端
- “始终在线”的连接可以提高性能并启用新功能,如...
- 对热门页面/产品的实时分析
- 通过允许客户服务在实时与客户互动来实现“辅助购物”
- 更多内容!
- “始终在线”的连接可以提高性能并启用新功能,如...
- 以及您想象中的任何交互式应用程序
测试
通过Makefile中的“make”目标提供
- PhpStan - 静态分析
- 单元测试
为什么创建这样的事情(尤其是在PHP中)?
- 想要为实施上述用途创建一个基础。
- 为了展示PHP是…
- 一种伟大的语言,过去人们对它的许多“问题”在最新版本中已经得到解决(特别是8+)
- 一种可以用于创建高性能、专业服务器端应用程序的语言