由“自处理”消息驱动的可扩展WebSocket应用服务器

v0.1.0-alpha 2022-02-08 04:35 UTC

This package is auto-updated.

Last update: 2024-09-09 21:15:23 UTC


README

Gitlab: https://gitlab.com/idimensionz/sassy

需求

安装说明

  1. 克隆存储库
  2. 运行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+)
    • 一种可以用于创建高性能、专业服务器端应用程序的语言