Skip to content

Repository files navigation

nychta-server

Apache-2.0 License .NET 10 Docker supported GitHub Stars

Nychta Server 是一个使用 ASP.NET Core 开发的第三方开源无名杀服务端。

本项目并非无名杀官方项目。

功能

  • 兼容无名杀原服务端的主要交互协议,可使用标准客户端连接,无需修改客户端或安装适配扩展
  • 提供可配置的连接、房间、消息速率、消息大小和消息缓冲限制,降低恶意或异常客户端耗尽服务端资源的风险
  • 提供结构化控制台日志和 HTTP 健康检查

环境要求

选择以下任意一种运行方式:

项目通过 global.json 指定 .NET SDK 版本。若使用本地 SDK,请先运行 dotnet --version 确认环境可用。

快速开始

本地运行

dotnet run --project src/NychtaServer.Cli

服务默认监听 http://0.0.0.0:8082

  • WebSocket 地址:ws://localhost:8082/
  • 健康检查地址:http://localhost:8082/health

可通过以下命令检查服务是否正常运行:

curl http://localhost:8082/health

正常情况下将返回:

{"status":"ok"}

Docker 运行

docker build -t nychta-server .
docker run --rm -p 8082:8082 nychta-server

容器启动后同样通过 ws://localhost:8082/ 连接。

配置

默认配置位于 src/NychtaServer.Cli/appsettings.json

配置项 默认值 说明
Server:Url http://0.0.0.0:8082 服务监听地址
Server:KeyTimeoutMilliseconds 2000 客户端提交身份密钥的超时时间(毫秒)
Server:HeartbeatIntervalMilliseconds 60000 WebSocket 心跳间隔(毫秒)
Server:LobbyUpdateDebounceMilliseconds 25 大厅信息更新的防抖时间(毫秒)
Server:MaxConnections 0 同时存在的 WebSocket 连接数上限;0 表示不限制
Server:MaxRoomMembers 0 单个房间的连接数上限(包含房主);0 表示不限制
Server:MaxMessagesPerSecond 0 单个 WebSocket 连接每秒处理的消息数;超限时会背压等待,0 表示不限制
Server:MaxMessageBytes 0 单条 WebSocket 消息的 UTF-8 字节数上限;超限时关闭连接,0 表示不限制
Server:MaxBufferedMessageBytes 67108864 所有连接正在组装或处理的消息缓冲总预算;0 表示不限制

可以修改配置文件,也可以使用 ASP.NET Core 的双下划线环境变量格式覆盖配置。例如,将监听端口改为 9000

Server__Url=http://0.0.0.0:9000 dotnet run --project src/NychtaServer.Cli

例如,将单连接的消息处理速率限制为每秒 100 条,并将单条消息限制为 1 MiB

Server__MaxMessagesPerSecond=100 Server__MaxMessageBytes=1048576 dotnet run --project src/NychtaServer.Cli

当前房间、客户端和联机活动状态均保存在内存中,服务重启后不会保留。

资源保护限制

这五项限制共同约束服务端可消耗的连接、房间与消息处理资源:

  • MaxConnections:限制同时在线的 WebSocket 连接数。达到上限后,新的 WebSocket 请求会在升级前收到 HTTP 503
  • MaxRoomMembers:限制每个房间的成员数(包含房主)。房间满员时,客户端会收到原有的 enterroomfailed 响应。
  • MaxMessagesPerSecond:限制每个连接每秒处理的消息数。超出速率时服务端会施加背压等待,而不是继续无上限处理。
  • MaxMessageBytes:限制单条消息的 UTF-8 字节数。消息过大时,服务端会关闭该连接。
  • MaxBufferedMessageBytes:限制所有连接组装和处理入站消息时可占用的总缓冲区。预算耗尽时,服务端会关闭触发超限的连接,避免内存被持续占用。

MaxBufferedMessageBytes 默认值为 64 MiB 外,其余限制默认关闭,以保持原服务端兼容性。所有限制均可设为 0 关闭;负数配置会导致服务启动失败。

开发

构建整个解决方案:

dotnet build

运行测试:

dotnet test

项目结构:

src/NychtaServer/          服务端核心逻辑
src/NychtaServer.Cli/      可执行服务与运行配置
tests/NychtaServer.Tests/  单元测试和集成测试

版权

本项目基于 Apache License 2.0 许可发布。

About

第三方开源无名杀服务端,使用ASP.NET Core开发

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages