Update

    /// <summary>
    /// 网络帧同步, 状态同步更新, 帧时间根据服务器主类的SyncSceneTime属性来调整速率
    /// </summary>
    public virtual void Update(IServerSendHandle<Player> handle, byte cmd = NetCmd.OperationSync)
    {
        var players = Clients;//多线程问题, 心跳 或 未知线程 添加或移除玩家时实时更新了哈希列表
        int playerCount = players.Count;
        if (playerCount <= 0)
            return;
        frame++;
        for (int i = 0; i < players.Count; i++)
            players[i]?.OnUpdate();//5000个客户端后出现null问题
        int count = operations.Count;//多线程后避免长度增加时,数据还没写入完成就会出现问题, 所以先取出写入完成的数据
        if (count > 0)
        {
            while (count > Split)
            {
                OnPacket(handle, cmd, Split);
                count -= Split;
            }
            if (count > 0)
                OnPacket(handle, cmd, count);
        }
        Event.UpdateEvent();
    }

最后更新于

这有帮助吗?