SyncWS - WS协调服务端

LSE SyncWS - WS协调服务端 4.5.2

版权类型
原创
版权链接
#
语言支持
简体中文
前置组件
GMLIB(MineBBS) - https://www.minebbs.com/resources/gmlib.6636/
GMLIB-LegacyRemoteCallApi(MineBBS) - https://www.minebbs.com/resources/gmlib-legacyremotecallapi-gmlib-remotecallapi.7159
GMLIB(GitHub) - https://github.com/GroupMountain/GMLIB/releases
GMLIB-LegacyRemoteCallApi(GitHub) - https://github.com/GroupMountain/GMLIB-LegacyRemoteCallApi/releases
适配版本(基岩)
  1. 最新版本
66602b53cf848.png

开源地址 | 反馈QQ群 | 799946510

======================================
# 本插件已重构,移步
CoordinationWss - WS协调服务端
======================================

# 开源地址: Gitee - LLSE-WS协调服务器端
# 在此感谢插件 WSClient-Sync 的开源代码,本插件借鉴了玩家数据保存与读取的代码(已经修改的面目全非)。
# 在此感谢
Tsubasa6848 帮助开发离线读写NBT的前置api,使跨服同步的玩家数据安全性有了极大保障。


# 作者:Wn1027
# 不要在评价区反馈bug,反馈bug请到讨论/反馈区,
# 本插件反馈QQ群: 311860068
# 众开发者插件定制群:799946510


开发契机:开个背包互通的资源服,专供玩家挖矿、探索遗迹、末地。解决主服资源枯竭,存档容量暴增等问题,可持续发展

======================================
十分重要:安装插件以及敏感操作前 务必备份 已有存档及插件数据!!

======================================

一、 插件功能

1、跨服玩家数据同步(主副服中心同步)
2、跨服跨存档聊天(单人存档、服务器均可)
3、跨服传送(所有连接云端的服务器均可在线互传)
4、平面&立体像素画生成(已失效)


【1.0.0】 本插件初期用于实现MC原版自带的Websocket功能,实现跨设备云端聊天、像素画功能。
【2.0.0】后利用LLSE api,实现单人存档、服务器存档或多设备游戏云端聊天。
【3.0.0】经过升级,现提供一种主服务器—资源服务器玩家同步的解决方案。实现跨服同步,同步内容与WSClient-Sync插件相同。
【4.0.0】优化代码结构,调用离线读写玩家数据的api,使玩家同步功能稳定性上升一个档次。

二、插件安装(版本升级请查看对应更新内容)


  1. 检查环境:确保安装lse-nodejs引擎(lip install --upgrade gitea.litebds.com/LiteLDev/legacy-script-engine-nodejs)。
  2. 解压后有 WS服务端插件(chatwss_Server) 和 WS客户端插件(chatwsc_Client)
  3. 服务端插件(chatwss_Server) 放到主服务器 ./plugins/下,客户端插件(chatwsc_Client)放到附属服务器./plugins/下,
  4. 将文件夹chatwss_Server、chatwsc_Client重命名为chatwss。
  5. 两个服务器都开服,生成配置文件(见两个服务器各自的目录 ./plugins/chatwss/ClientConfig.json)(如果开服时因网络原因npm安装不幸卡住或报错,比如含有报错Error: Cannot find module “ws”,可以在这里下载依赖包,解压到./plugins/chatwss/下然后重启,WS服务端客户端通用)
  6. 打开主服务器 和 附属服务器配置文件(ClientConfig.json),设置以下键值,其他可按需配置。
    默认设置下,必须要将其中一个服务器设为主服(“main”),只设一个,不要多了!
    WS服务端配置"SyncInventoryDB"为”外置中心数据库“的情况下,所有服务器都设为“sub”


    [TABLE=collapse]
    [TR]
    [TD]
    [/TD]

    [TD]
    [/TD]
    [/TR]
    [TR]
    [TD]
    “ConnectUrl”​
    [/TD]

    [TD]
    Websocket服务端地址(主服务器IP)ws://127.0.0.1:9001 默认端口9001,优先本地局域网ip,然后公网ip。​
    [/TD]
    [/TR]
    [TR]
    [TD]
    "ServerName"​
    [/TD]

    [TD]
    服务器名称(可以为中文,例如“资源世界”,默认为存档名)​
    [/TD]
    [/TR]
    [TR]
    [TD]
    “BDSIp”​
    [/TD]

    [TD]
    本服公网IP地址​
    [/TD]
    [/TR]
    [TR]
    [TD]
    “BDSPort”​
    [/TD]

    [TD]
    本服公网端口​
    [/TD]
    [/TR]
    [TR]
    [TD]
    “ServerType”​
    [/TD]

    [TD]
    服务器类型 "sub": 附属服务器, “main”:主服务器​
    [/TD]
    [/TR]
    [/TABLE]

    JavaScript:
    let WSSConfig = {
        "CONFIG": "此为Websocket协调服务端配置文件",
        "Websocket": {
            "ServerName": "WS协调服务端", // WS协调服务端名称
            "Port": 9001,                // WS协调服务端端口
            "ConnectKey": "FlySteve",    // WS协调服务端连接密钥
        },
        "Chat": {
            "chatDisplay": true,                       // WS协调服务端控制台聊天显示
            "chatLog": true,                           // 聊天日志, 记录所有玩家聊天日志到./log/chatwss/PlayerChat/
            "chatHeader": "",                          // 聊天前缀, 玩家在聊天内容开头添加此字符进行云端聊天。
            "tipHeader": "§d『§b${ServerName}§d』§r",  // 聊天显示头衔, ${ServerName} 替换为WS协调服务端名称。
        },
        "MapDrawing":{
            "imgFilePath": "./plugins/CustomMap/.img"   // CustomGetMap图片库路径 ./plugins/CustomMap/.img
        },
        "Sync": {
    "SyncInventoryDB": "主服存档", // 跨服同步:玩家数据库保存位置: '主服存档'[S], '外置中心数据库 (4.5.1版本已失效)'[/S]
            "SyncInventoryDBPath": "./plugins/chatwss", // 跨服同步:插件数据路径
            "BackupTime": "0 0 22 * * *",               // 外置中心数据库备份时间(Cron表达式,默认每晚22:00)
            "BackupDir": "./backup/chatwss",            // 外置中心数据库备份路径
            "BackupRemainDays": 15,                     // 外置中心数据库备份留存天数。
            "SyncMode": "center",                       // 跨服同步:(此配置无效)中心同步: 'center' 分布式同步:'distributed'
        }
    
    }

    JSON:
    {
        "CONFIG": "此为Websocket客户端配置文件",
        // Websocket网络
        "ConnectUrl": "ws://127.0.0.1:9001",           // 要连接的Websocket地址,优先本地局域网ip(请填写此项)
        "ConnectKey": "FlySteve",                      // 连接密钥
        "BDSUid": "84b967ab295e4d358c20de29ce68788b",     // BDS唯一识别名(每个服务器一个, 不能重复, 不可擅自修改")
        "BDSIp": getPublicIP(),                        // 本服公网IP地址(请核对此项)
        "BDSPort": BDSPort,                            // 本服公网端口(请核对此项)
    
        // 聊天配置
        "ServerName": Levelname,                       // 服务器名称 (默认为存档名) & 提示信息前缀
        "ChatWSDisplay": false,                        // WS控制台聊天显示
        "ExecutorLevel": 1,                            // 云端./命令执行权限: 1为仅op可执行./命令, 0为任何在线玩家都可执行
    
        // 玩家数据同步配置
        "SyncConfig":{
            "Enabled": true,                               // 同步功能总开关
            "PlayerDbDir": "./plugins/chatwss/PlayerData", // 玩家数据库路径
            "PlayerDbFormat": "leveldb",                   // 玩家数据储存格式('leveldb' or 'json')
            "BackupTime": "0 0 22 * * *",                  // 玩家数据备份时间(Cron表达式) (默认是每晚十点备份一次) (务必与存档备份时间同步)
            "BackupDir": "./backup/chatwss",               // 玩家数据备份路径(时间上跟随存档备份)
            "BackupRemainDays": 15,                        // 玩家数据备份留存天数:数据量不大,可以适当多存点
            "ServerType": 'sub',                           // BDS类型, 用于玩家数据同步, 'sub'BDS 向 'main'BDS 同步
            "SafeLeftMode" : true,                         // 安全退出模式:上次玩家从服务器非正常退出(onLeft(pl)没有监听到), 则该玩家必须先登录上次服务器。
            "AllowCreateNewPlayer": true,                  // 是否允许在存档新建玩家。(新玩家登录副服不用传送主服)
            "AutoSyncCycle": 30000,                        // 自动同步周期(ms)
            "SyncOption": {                                // 玩家数据同步选项(这里是本服作为同步数据接收方的同步项开关)
                "syncInventory": true,                  // 跨服背包
                "syncLLMoney": true,                    // 跨服LLMoney(实时同步,请先手动同步一次:复制粘贴./plugins/LegacyMoney/economy.db.db)
                "syncScoreboard": [],                   // 跨服计分板,填入想要同步的计分项(非实时同步,跟随背包同步)
                "syncTags": true,                       // 跨服Tag
                "syncEnderChest": true,                 // 跨服末影箱
                "syncLevel": true,                      // 跨服经验等级
                "syncEffects": false,                   // 跨服药水效果
                "syncCmd": ["allowlist", "whitelist"]   // 同步执行的命令(主服执行,则其他服也同步执行);
            }
        }
    }

  7. 开放协调服务端(chatwss_Server)所在的云服务器防火墙tcp9001端口,供Websocket通信(默认9001端口,如有需要在main3d.js中修改)
  8. 重启所有服务器,等待副服连接主服。内网穿透(映射tcp9001)可能连接不上,如有解决方法欢迎进群反馈)。
  9. 建议加入反馈群(311860068)咨询服务器维护问题。
  10. 已导出PAPI变量:在线玩家数量: %wss_onlinePlayersNum% 在线玩家列表:%wss_onlinePlayers%
  11. 如有GMLIB依赖冲突或Fail import报错,可删除GMLIB-LegacyRemoteCallApi/manifest.json里的"passive": true一项。

    WS服务端插件(chatwss_Server) 已整合本地客户端,主服务器安装chatwss_Server后无需再安装chatwsc_Client。

    WS协调服务端(chatwss_Server) 可作为独立程序运行,可以单独放在另一台有公网ip的电脑上
    # 在Nodejs官网下载并安装Nodejs环境。
    # 在package.json所在目录执行控制台命令 npm install --registry=https://registry.npmmirror.com 自动安装相关依赖包。
    # 点击startWsserver.bat运行WS协调服务端。
    # BDS、单人存档均可连接到此WS服务端。
    # 服务端命令: 输入help查看。其中有命令,可以将外置数据库的所有玩家数据同步到连接的所有BDS,操作前务必备份所有BDS存档。

三、(重要)服主维护操作说明
  1. 服务器关闭
    推荐用sync stop命令代替原版stop命令。此命令会使玩家都正常退出,将数据同步后再自动关闭服务器。(防止掉线玩家被置为意外退出状态)

    (如副服断开了WS协调服务器,将持续断线重连,期间阻止玩家登录,已在线的玩家不受影响。如果开启了LLMoney实时同步,为防止失去同步,如果主服断开,其他服的玩家都会被踢出游戏。)
  2. 存档备份
    请修改主服务器的客户端(ClientConfig.json)配置文件,使主数据库备份时间与存档备份时间同步
    请修改WS协调服务端(WSSConfig.json)配置文件,使外置中心数据库备份时间与存档备份时间同步
    默认每晚10点(22点)备份一次,请自行修改。
    (修改配置文件中的BackupTime,使用Cron表达式,不可以有?号。备份路径在 ./backup/chatwss/下)
  3. BDS升级
    最好不要将./plugins/LeviLamina/data内的文件删除或替换掉。里面记录着所有进服玩家的名字、xuid、uuid信息。
  4. 服务器回档
    请将存档回档,然后将./backup/chatwss/下对应的数据库还原。
  5. 插件文件目录
    [TABLE=collapse,noborder]
    [TR]
    [TD]
    文件项目
    [/TD]

    [TD]
    目录或文件
    [/TD]
    [/TR]
    [TR]
    [TD]插件本体(服务端)[/TD]
    [TD]./plugins/chatwss/main3d.js[/TD]
    [/TR]
    [TR]
    [TD]插件本体(客户端)[/TD]
    [TD]./plugins/chatwsc/ChatWsClient_node.js[/TD]
    [/TR]
    [TR]
    [TD]WS服务端配置文件[/TD]
    [TD]./plugins/chatwss/WSSConfig.json[/TD]
    [/TR]
    [TR]
    [TD]WS客户端配置文件[/TD]
    [TD]./plugins/chatwss/ClientConfig.json[/TD]
    [/TR]
    [TR]
    [TD]玩家缓存数据(存有玩家最近一次上线的状态信息,无意外退出状态可删)[/TD]
    [TD]./plugins/chatwss/playerData/[/TD]
    [/TR]
    [TR]
    [TD]外置中心数据库(存有玩家背包数据,十分重要)[/TD]
    [TD]./plugins/chatwss/CENTERDATA[/TD]
    [/TR]
    [TR]
    [TD]外置中心数据库缓存(存有玩家最近一次上线的状态信息,无意外退出状态可删)[/TD]
    [TD]./plugins/chatwss/CENTERTemp[/TD]
    [/TR]
    [TR]
    [TD]导出的玩家数据[/TD]
    [TD]./plugins/chatwss/export/[/TD]
    [/TR]
    [TR]
    [TD]WS服务端玩家聊天日志[/TD]
    [TD]./logs/chatwss/PlayerChat/[/TD]
    [/TR]
    [TR]
    [TD]备份[/TD]
    [TD]./backup/chatwss/[/TD]
    [/TR]
    [/TABLE]

  6. 卸载本插件
    确认所有服务器开服后都没有玩家处于意外退出状态的warn提示,然后就可以删除本插件。
    本插件不存储玩家存档数据(主服存档模式,非外置数据库),可放心删除插件。
    卸载后玩家背包等数据以主服为准,副服数据不一定是最新的。
四、功能说明
  1. 云端聊天
    玩家单人存档使用connect命令,
    BDS服务器使用本插件客户端均可连接到主服务器服务端,跨服跨存档即时聊天。


  2. 云端命令
    云端./命令默认仅OP可使用,输入./help查看帮助。对于BDS服务器连接,可修改配置文件使服务器内其他人也可以使用云端命令。
    输入 .online 可以显示在线的云端连接,不受op限制。


  3. 像素地图画生成(此功能暂无法使用)
    (1)如果你使用CustomGetMap自定义地图画插件,那么你应该知道什么是地图画,
    (2)不同的是,CustomMap是修改存档数据,而本插件是仅利用原版特性,放置方块到世界中形成像素画。
    (3)注意:本功能会在世界中放置大量方块,请务必提前备份存档 或在单人存档连接协调服务器后测试。
    (4)将裁剪后的图片(.jpg)置于./plugin/CustomMap/.img/目录下,
    (5)可选择平面、立体两种生成模式。平面可用颜色少,立体可用颜色为3倍,但体积将会巨大,推荐在超平坦世界玩立体地图画。
    (6)命令:OP玩家输入 ./paint 图片名.jpg [flat(平面)|uneven(立体)] [步长:32-128的数字]


  4. 跨服同步
    (1)跨服玩家数据同步: (在各服务器的ClientConfig.json 中配置,各服务器配置务必保持一致)
    (2)基本同步逻辑:所有 附属服务器 主服务器或外置中心数据库为准进行同步。
    (3)跨服同步逻辑:见插件图片。


  5. 注册指令
    【命令】sync list: 列出同步服务器所有玩家
    【命令】sync list num: 返回同步服务器的玩家数量
    【命令】sync reload: 重载跨服同步选项
    【命令】sync transfer:传送至同步服务器
    【命令】sync transfer <BDSIp> <BDSPort>:传送至任意服务器
    【命令】sync backup: 备份玩家数据
    【命令】sync stop:请使用此命令替换原版 stop命令, 将所有玩家断开后再关闭服务器。
    【命令】sync debug <true|false>: 开启和关闭debug模式

    以下命令无法确保导出存档所有玩家数据,计划废弃。
    【命令】sync upload <realName|all>: 向主服存档/中心数据库上传玩家数据
    【命令】sync export <realName|all>: 导出玩家数据
    【命令】sync import <realName|all>: 导入玩家数据

    【独立WS服务端命令】输入help查看。

# 插件图片
start.jpg


transferMenu.jpg


WS协调服务端也可独立运行:

独立.jpg


协调服务端同步逻辑

协调服务器同步逻辑.png


kuxiao.jpg

#
Author
10_27
价格
240金粒
Downloads
172
Views
7,391
First release
Last update

Ratings

5.00 star(s) 3 ratings

Resource team

More resources from 10_27

Share this resource

Latest updates

  1. 4.5.2 添加GMLRC依赖适配1.21

    修复 添加GMLRC依赖适配1.21, 如果有Fail Import或依赖冲突报错可尝试删除GMLIB-LegacyRemoteCallApi/manifest.json...
  2. 4.5.1 SNBT解析接口有问题,改为二进制解析

    升级步骤: 仅修改了ChatWsClient_node.js文件。 主副服都替换该文件,然后重启即可。 (主服文件在lib文件夹下) 【~】SNBT解析接口有问题,改为二进制解析...
  3. 4.5.0-beta

    本次更新升级步骤: 注意:插件个人开发,难以做到详尽测试。升级有风险,务必备份所有BDS,升级后请检查玩家数据完整性。 安装LLv0.9.5版本及以上...

Latest reviews

不错不错。
配合另一个插件把地图切成区域,可以实现变相利用多线程,技术成熟了我会发教程
狠狠地期待正式版本!
Back
Top Bottom