【C#生态园】后端服务与网络库:选择适合你游戏开发的利器
网络通信不再难题:六种常用游戏开发网络库详解
前言
随着网络游戏行业的蓬勃发展,对于实时多玩家游戏服务和网络通信库的需求也日益增长。在游戏开发中,选择合适的后端服务和网络库可以极大地影响游戏的性能、稳定性和用户体验。本文将介绍几种常用的后端服务和网络库,以及它们的核心功能、安装配置方法和API概览。
欢迎订阅专栏:C#生态园
文章目录
- 网络通信不再难题:六种常用游戏开发网络库详解
- 前言
- 1. PlayFab:一个提供后端服务的游戏开发平台
- 1.1 简介
- 1.1.1 核心功能
- 1.1.2 使用场景
- 1.2 安装与配置
- 1.2.1 安装指南
- 1.2.2 基本设置
- 1.3 API 概览
- 1.3.1 用户管理
- 1.3.2 物品管理
- 2. Photon:一个提供实时多玩家游戏服务的平台
- 2.1 简介
- 2.1.1 核心功能
- 2.1.2 使用场景
- 2.2 安装与配置
- 2.2.1 安装方法
- 2.2.2 基本设置
- 2.3 API 概览
- 2.3.1 实时通讯
- 2.3.2 房间管理
- 3. Lidgren.Network:用于网络通信和数据包处理的库
- 3.1 简介
- 3.1.1 核心功能
- 3.1.2 使用场景
- 3.2 安装与配置
- 3.2.1 安装指南
- 3.2.2 基本配置
- 3.3 API 概览
- 3.3.1 连接管理
- 3.3.2 数据包处理
- 4. Mirror:一个基于Unity的开源网络库,用于创建多人在线游戏
- 4.1 简介
- 4.1.1 核心功能
- 4.1.2 使用场景
- 4.2 安装与配置
- 4.2.1 安装方法
- 4.2.2 基本设置
- 4.3 API 概览
- 4.3.1 同步对象
- 4.3.2 网络事件
- 5. DarkRift Networking:一个专注于性能和可靠性的跨平台网络库
- 5.1 简介
- 5.1.1 核心功能
- 5.1.2 使用场景
- 5.2 安装与配置
- 5.2.1 安装指导
- 5.2.2 基本配置
- 5.3 API 概览
- 5.3.1 客户端连接
- 5.3.2 数据序列化
- 6. Lidgren.Lite:一个轻量级且快速的网络库,适用于小型游戏项目
- 6.1 简介
- 6.1.1 核心功能
- 6.1.2 使用场景
- 6.2 安装与配置
- 6.2.1 安装指南
- 6.2.2 基本设置
- 6.3 API 概览
- 6.3.1 连接协商
- 6.3.2 数据传输
- 总结
1. PlayFab:一个提供后端服务的游戏开发平台
1.1 简介
PlayFab 是一个为游戏开发者提供后端服务的平台,旨在简化游戏开发过程中的后端管理工作。它提供了多种功能和工具,帮助开发者处理用户数据、游戏物品、统计数据等。
1.1.1 核心功能
PlayFab 提供了丰富的核心功能,包括玩家身份验证、存储玩家数据、虚拟货币管理、游戏物品管理等。这些功能可以大大简化游戏后端的开发和管理工作。
1.1.2 使用场景
PlayFab 可以被应用于各种类型的游戏,从单机游戏到在线多人游戏都适用。无论是小型独立开发者还是大型游戏工作室,都可以通过使用 PlayFab 来简化他们的后端开发工作。
1.2 安装与配置
1.2.1 安装指南
要开始使用 PlayFab,首先需要在官方网站注册账号并创建一个新的游戏项目。接着,可以按照官方文档提供的安装指南进行部署和配置。一般来说,PlayFab 提供了丰富的 SDK 和插件支持,可以轻松集成到各种游戏引擎和开发环境中。
1.2.2 基本设置
在完成安装和部署后,通常需要进行基本的设置,例如创建玩家账户系统、定义虚拟物品等。这些设置可以通过 PlayFab 的控制台或者 API 来进行管理。
1.3 API 概览
1.3.1 用户管理
PlayFab 提供了丰富的用户管理 API,可以用于处理玩家账户、认证、角色权限等操作。以下是一个使用 C# SDK 进行玩家登录的示例代码:
using PlayFab;
using PlayFab.ClientModels;public class PlayerManager
{public void Login(string username, string password){var request = new LoginWithPlayFabRequest{Username = username,Password = password};PlayFabClientAPI.LoginWithPlayFab(request, OnLoginSuccess, OnLoginFailure);}private void OnLoginSuccess(LoginResult result){// 登录成功后的处理}private void OnLoginFailure(PlayFabError error){// 处理登录失败情况}
}
更多关于用户管理的 API 信息,请参考 PlayFab 官方文档。
1.3.2 物品管理
除了用户管理外,PlayFab 也提供了丰富的物品管理 API,可以用于定义、交易和管理游戏内的虚拟物品。以下是一个使用 C# SDK 进行获取玩家物品列表的示例代码:
using PlayFab;
using PlayFab.ClientModels;public class ItemManager
{public void GetPlayerItems(string playerId){var request = new GetUserInventoryRequest{PlayFabId = playerId};PlayFabClientAPI.GetUserInventory(request, OnGetInventorySuccess, OnGetInventoryFailure);}private void OnGetInventorySuccess(GetUserInventoryResult result){// 处理获取物品列表成功的情况}private void OnGetInventoryFailure(PlayFabError error){// 处理获取物品列表失败的情况}
}
更多关于物品管理的 API 信息,请参考 PlayFab 官方文档。
2. Photon:一个提供实时多玩家游戏服务的平台
2.1 简介
Photon是一种用于实时多玩家游戏服务的平台,能够为开发者提供可扩展的基础设施,以及通过云服务支持快速而稳定地构建多人游戏。它提供了一系列功能,使得开发者可以专注于游戏本身的创意和玩法,而不必花费大量精力在网络编程和服务器架构上。
2.1.1 核心功能
Photon的核心功能包括实时通讯、房间管理、匹配制度、数据同步等。这些功能能够帮助开发者轻松地构建多人在线游戏,并且提供了高度可定制化的选项,以满足不同类型游戏的需求。
2.1.2 使用场景
Photon适用于各种类型的实时多人游戏,包括但不限于动作游戏、策略游戏、竞技游戏等。无论是小型独立开发团队还是大型游戏公司,都可以通过Photon来构建他们的多人游戏项目。
2.2 安装与配置
使用Photon之前,首先需要进行安装和基本设置。
2.2.1 安装方法
你可以通过Photon官方网站获取最新的SDK,然后将其集成到你的开发环境中。SDK提供了对各种平台的支持,包括Unity、Unreal、Cocos等。
2.2.2 基本设置
安装完SDK后,你需要通过Photon官方网站注册一个账号,并创建一个应用。每个应用都有一个唯一的AppId,你需要将这个AppId配置到你的项目中,以便与Photon服务器进行通讯。
2.3 API 概览
Photon提供了丰富的API,使得开发者可以轻松地实现实时通讯和房间管理等功能。
2.3.1 实时通讯
使用Photon的实时通讯API,你可以轻松地在多个客户端之间传输数据,实现实时同步。以下是一个简单的C#示例代码:
// 创建一个房间
RoomOptions roomOptions = new RoomOptions { MaxPlayers = 4 };
PhotonNetwork.CreateRoom("RoomName", roomOptions);// 加入一个已存在的房间
PhotonNetwork.JoinRoom("RoomName");
更多关于实时通讯的API和用法,请参考Photon Realtime for Unity。
2.3.2 房间管理
Photon的房间管理API允许你轻松地创建、加入和管理游戏房间。下面是一个简单的C#示例代码:
// 创建一个房间
RoomOptions roomOptions = new RoomOptions { MaxPlayers = 4 };
PhotonNetwork.CreateRoom("RoomName", roomOptions);// 加入一个已存在的房间
PhotonNetwork.JoinRoom("RoomName");// 离开房间
PhotonNetwork.LeaveRoom();
更多关于房间管理的API和用法,请参考Photon Room for Unity.
3. Lidgren.Network:用于网络通信和数据包处理的库
3.1 简介
Lidgren.Network 是一个用于网络通信和数据包处理的 C# 库,提供了可靠的 UDP 通信和简单的消息处理功能。它适用于开发需要实时网络通信的游戏服务器和客户端。
3.1.1 核心功能
Lidgren.Network 主要包含以下核心功能:
- 高性能的UDP通信
- 封装了消息发送和接收的细节
- 自动处理数据包的分片、重发和排序
- 支持多种连接模式
- 提供简单的API进行连接管理和数据处理
3.1.2 使用场景
Lidgren.Network 可以被用于开发各种需要网络通信的场景,特别是对于游戏服务器而言,它提供了高效、可靠的网络通信方案。
3.2 安装与配置
3.2.1 安装指南
你可以通过 NuGet 来安装 Lidgren.Network。在 Visual Studio 中打开 NuGet 包管理器控制台,执行以下命令来安装:
Install-Package lidgren.network
3.2.2 基本配置
安装完成后,你可以在项目中引用 Lidgren.Network,并开始使用它进行网络通信的开发工作。
3.3 API 概览
3.3.1 连接管理
Lidgren.Network 提供了简洁而强大的连接管理功能。下面是一个简单的例子,演示了如何创建一个基础的客户端连接到服务器:
using Lidgren.Network;class GameClient
{NetClient client;public void ConnectToServer(){NetPeerConfiguration config = new NetPeerConfiguration("game");client = new NetClient(config);client.Start();NetOutgoingMessage outMsg = client.CreateMessage();outMsg.Write("Hello Server!");client.Connect("127.0.0.1", 12345, outMsg);}
}
更多关于连接管理的 API 可以在 Lidgren.Network 官方文档 中找到。
3.3.2 数据包处理
除了连接管理,Lidgren.Network 也提供了便捷的数据包处理功能。下面是一个简单的服务端示例,展示了如何接收客户端发送的消息:
using Lidgren.Network;class GameServer
{NetServer server;public void StartServer(){NetPeerConfiguration config = new NetPeerConfiguration("game");server = new NetServer(config);server.Start();while (true){NetIncomingMessage msg;while ((msg = server.ReadMessage()) != null){switch (msg.MessageType){case NetIncomingMessageType.Data:string data = msg.ReadString();Console.WriteLine("Received: " + data);break;// 处理其他类型的消息}}}}
}
以上是一个简单的数据包处理的示例,更详细的信息可以在 Lidgren.Network GitHub 仓库 中找到。
通过本文,你已经了解了 Lidgren.Network 的基本使用方法以及其在游戏服务器开发中的重要性。希望这些信息对你有所帮助!
4. Mirror:一个基于Unity的开源网络库,用于创建多人在线游戏
4.1 简介
Mirror是一个基于Unity的开源网络库,旨在简化多人在线游戏开发过程。它提供了强大的功能和灵活的工具,使开发人员能够轻松地创建和管理多人游戏项目。
4.1.1 核心功能
- 高性能网络通信:Mirror采用高效的网络通信协议,可以支持大量玩家同时在线的需求。
- 同步对象:通过Mirror,开发人员可以方便地实现游戏中各种对象的同步,包括位置、旋转、动画等。
- 网络事件处理:Mirror提供了丰富的网络事件处理功能,可以轻松应对玩家连接、断开连接、数据同步等情况。
4.1.2 使用场景
Mirror适用于需要实现多人在线游戏的项目,无论是实时对战游戏、多人合作游戏还是大型多人在线角色扮演游戏(MMORPG),都能够从Mirror提供的功能和性能优势中受益。
4.2 安装与配置
4.2.1 安装方法
Mirror可以通过Unity的Package Manager进行安装。在Unity中打开Package Manager,点击"Add package from git URL",输入Mirror的GitHub仓库地址即可完成安装。
// 在Unity的Package Manager中添加Mirror的GitHub仓库地址
https://github.com/vis2k/Mirror.git
4.2.2 基本设置
安装Mirror后,可以通过简单的配置即可开始使用。在Unity中创建一个空对象,然后添加NetworkManager组件,并在Inspector面板中进行相关网络设置,如指定服务器IP、端口等。
4.3 API 概览
4.3.1 同步对象
Mirror提供了简单易用的API来实现对象的同步。以下是一个简单的示例代码,演示了如何同步一个Cube对象的位置和旋转信息:
using Mirror;
using UnityEngine;public class SyncedObject : NetworkBehaviour
{[SyncVar] private Vector3 position;[SyncVar] private Quaternion rotation;void Update(){if (isLocalPlayer){// 获取用户输入或其他操作,更新position和rotationposition = transform.position;rotation = transform.rotation;}}void FixedUpdate(){if (!isLocalPlayer){// 应用同步的position和rotationtransform.position = position;transform.rotation = rotation;}}
}
更多关于对象同步的API可以参考Mirror的官方文档:Mirror SyncVar
4.3.2 网络事件
Mirror提供了丰富的网络事件处理功能,可以通过重写相关函数来处理连接、断开连接、数据同步等事件。以下是一个简单的示例代码,演示了如何处理玩家连接和断开连接的事件:
using Mirror;
using UnityEngine;public class PlayerConnection : NetworkBehaviour
{public override void OnStartServer(){Debug.Log("Player connected!");}public override void OnStopClient(){Debug.Log("Player disconnected!");}
}
更多关于网络事件处理的API可以参考Mirror的官方文档:Mirror NetworkBehaviour
5. DarkRift Networking:一个专注于性能和可靠性的跨平台网络库
5.1 简介
DarkRift Networking 是一个专注于性能和可靠性的跨平台网络库,适用于开发游戏服务器。它提供了一系列强大的功能,使得开发者可以轻松地实现多人游戏的网络通信。
5.1.1 核心功能
- 高性能的网络通信
- 可靠的数据传输
- 跨平台支持
- 灵活的自定义配置
- 内置的安全机制
5.1.2 使用场景
DarkRift Networking 适用于任何需要实现多人游戏功能的场景,包括但不限于实时对战游戏、多人合作游戏等。
5.2 安装与配置
5.2.1 安装指导
您可以通过 NuGet 来安装 DarkRift Networking。在 Visual Studio 中打开 NuGet 包管理器控制台,并执行以下命令:
Install-Package DarkRift
更多安装信息,请参考官方文档
5.2.2 基本配置
安装完成后,您需要进行基本的配置,包括创建服务器和客户端实例、设置端口号、注册事件处理程序等。下面是一个简单的示例:
// 创建服务器实例
using (var server = new DarkRiftServer(new ServerSpawnData("serverName", IPAddress.Any, 4296)))
{server.Start();// 监听客户端连接server.ClientManager.ClientConnected += (sender, e) =>{Console.WriteLine("Client connected: " + e.Client.ID);};// 处理接收到的消息server.MessageReceived += (sender, e) =>{using (Message message = e.GetMessage()){if (message.Tag == Tags.Tag){string data = message.ReadString();Console.WriteLine("Received message: " + data);}}};
}
更多配置信息,请参考官方文档
5.3 API 概览
5.3.1 客户端连接
DarkRift Networking 提供了简单易用的 API 来处理客户端连接,例如监听客户端连接事件、发送数据给特定客户端等。以下是一个简单的客户端连接示例:
using (var client = new DarkRiftClient())
{client.MessageReceived += (sender, e) =>{using (Message message = e.GetMessage()){if (message.Tag == Tags.Tag){string data = message.ReadString();Console.WriteLine("Received message: " + data);}}};client.ConnectInBackground(IPAddress.Parse("127.0.0.1"), 4296, IPVersion.IPv4, (connectionState, exception) =>{if(connectionState == ConnectionState.Connected){// 连接成功}else{// 连接失败}});
}
5.3.2 数据序列化
DarkRift Networking 提供了方便的数据序列化和反序列化功能,以便进行网络数据传输。以下是一个简单的数据序列化示例:
using (var writer = DarkRiftWriter.Create())
{writer.Write("Hello, DarkRift!");using (var message = Message.Create(Tags.Tag, writer)) {client.SendMessage(message, SendMode.Reliable);}
}
更多 API 信息,请参考官方文档
以上是关于 DarkRift Networking 的简要介绍、安装配置和 API 概览,希望对您有所帮助。
6. Lidgren.Lite:一个轻量级且快速的网络库,适用于小型游戏项目
Lidgren.Lite 是一个专门用于游戏开发的轻量级网络库。它提供了快速、可靠的网络通信解决方案,特别适用于小型游戏项目。
6.1 简介
6.1.1 核心功能
Lidgren.Lite 提供了可靠的UDP通信以及TCP连接支持。它还包括了数据加密、压缩和可靠性保证等功能,让游戏开发者能够更专注于游戏逻辑的实现。
6.1.2 使用场景
Lidgren.Lite 最适合于需要快速搭建网络通信部分的小型游戏项目。由于其轻量级和快速的特点,也可以用于对网络性能要求较高的大型游戏项目中。
6.2 安装与配置
6.2.1 安装指南
你可以通过 NuGet 包管理器来安装 Lidgren.Lite。在 Visual Studio 中,打开项目解决方案,右键点击“引用”->“管理NuGet程序包”,搜索并安装 Lidgren.Lite。
// 使用NuGet Package Manager安装Lidgren.Lite
Install-Package Lidgren.Network.Lite
6.2.2 基本设置
在你的项目中,添加对 Lidgren.Network
的引用,并在需要使用的地方引入命名空间即可开始使用。
using Lidgren.Network;
6.3 API 概览
6.3.1 连接协商
Lidgren.Lite 提供了简单易用的连接协商接口,示例如下:
// 创建一个客户端或服务端实例
NetPeerConfiguration config = new NetPeerConfiguration("yourgame");
NetClient client = new NetClient(config);
NetServer server = new NetServer(config);// 客户端连接到服务器
client.Start();
client.Connect("127.0.0.1", 14242);
详细的连接协商API可以参考 Lidgren.Lite 官方文档
6.3.2 数据传输
Lidgren.Lite 提供了多种数据传输方法,包括原始字节数组和自定义消息类型的传输方式。
// 发送原始字节数组
byte[] data = Encoding.UTF8.GetBytes("Hello, World!");
client.SendData(data, NetDeliveryMethod.Unreliable);// 发送自定义消息类型
NetOutgoingMessage msg = client.CreateMessage();
msg.Write("This is a custom message");
client.SendMessage(msg, NetDeliveryMethod.ReliableOrdered);
更多关于数据传输的详细信息,请参考 Lidgren.Lite 文档
通过以上的内容,你可以初步了解并使用 Lidgren.Lite 网络库来构建你的小型游戏项目的网络通信部分。
总结
本文对六种常用的后端服务和网络库进行了介绍,包括PlayFab、Photon、Lidgren.Network、Mirror、DarkRift Networking和Lidgren.Lite。这些工具涵盖了从提供后端服务到实时多玩家游戏服务、网络通信和数据包处理的各个方面。通过本文的阅读,读者可以对这些库有一个初步的了解,并在实际项目中选择适合自己需求的工具。
相关文章:
【C#生态园】后端服务与网络库:选择适合你游戏开发的利器
网络通信不再难题:六种常用游戏开发网络库详解 前言 随着网络游戏行业的蓬勃发展,对于实时多玩家游戏服务和网络通信库的需求也日益增长。在游戏开发中,选择合适的后端服务和网络库可以极大地影响游戏的性能、稳定性和用户体验。本文将介绍…...
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-30
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-30 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-30目录1. Proof Automation with Large Language Models概览:论文研究背景:技术挑战:如何破局…...
【漏洞复现】JeecgBoot 积木报表 queryFieldBySql sql注入漏洞
》》》产品描述《《《 积木报表,是一款免费的企业级Web报表工具,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! 》》》漏洞描述《《《 JeecgBoot 积木报表 queryFieldBySq| 接口存在一个 SQL 注入漏洞&…...
Qt6 中相对于 Qt5 的新增特性及亮点
Qt 是一个领先的跨平台应用开发框架,涵盖了桌面、移动、嵌入式等多个平台。随着 Qt6 的发布,Qt 框架经历了重大升级和变革,带来了大量新特性和架构上的改进,使开发者可以更高效地开发现代化应用程序。本文将重点讨论 Qt6 相对于 Q…...
超轻巧modbus调试助手使用说明
一、使用说明 1.1 数据格式 和其他的modbus采集工具一样,本组件也支持各种数据格式,其实就是高字节低字节的顺序。一般是2字节表示一个数据,后面又有4字节表示一个数据,目前好像还有8字节表示一个数据的设备。不同厂家的设备对应…...
Percona Monitoring and Management
Percona Monitoring and Management (PMM)是一款开源的专用于管理和监控MySQL、MongoDB、PostgreSQL...
WarehouseController
目录 1、 WarehouseController 1.1、 //仓库信息设置 1.2、 /// 查询 1.3、 /// 删除 WarehouseController using QXQPS.Models; using QXQPS.Vo; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mv…...
基于 STM32 单片机的温室物理无害生长系统
摘要 : 本系统主要由六大部分组成,分别为 STM32单片机控制模块、温湿度检测模块、风扇、臭氧消毒、温室补光灯、水利灌溉通道等基本设施。单片机可以通过 MOS 管这类的电力电子器件来实现对某些大功率设施的控制如温室内风扇通风系统、温室内定时补光、根据土壤温湿检测来进行…...
新版pycharm如何导入自定义环境
我们新的版本的pycharm的ui更改了,但是我不会导入新的环境了 我们先点击右上角的add interpreter 然后点击添加本地编译器 先导入这个bat文件 再点击load 我们就可以选择我们需要的环境了...
一文彻底搞懂多模态 - 多模态理解+视觉大模型+多模态检索
文章目录 技术交流多模态理解一、图像描述1. 基于编码器-解码器的方法2. 基于注意力机制的方法3. 基于生成对抗网络的方法 二、视频描述三、视觉问答 视觉大模型一、通用图像理解模型二、通用图像生成模型 多模态检索一、单模态检索二、多模态检索三、跨模态检索 最近这一两周看…...
提升效率的编程世界探索与体验
--- 在如今这个信息爆炸、竞争激烈的时代,工作效率对于程序员来说显得尤为重要。为了在日益繁忙的工作环境中脱颖而出,选择合适的编程工具成为了一个关键的决定。不同的工具各有其优势,有的擅长简化代码编写,有的则擅长自动化任…...
VMware tools菜单为灰色无法安装
这个工具之前为灰色,无法安装,导致无法实现跟主机的共享文件夹等操作。极为不便。 根据其他教程提示:看到软件是这个配置。 修改为自动检测,tools就可以安装了。之前没注意到。 也有说dvd光盘也要设置。但是经过我测试。只设置软…...
不相同的二叉搜索树
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出:5示例 2: 输入:n 1 输出:1提…...
毕业论文设计javaweb+VUE高校教师信息管理系统
目录 一、系统概述 二、功能详解 1. 教师管理 2. 部门管理 3. 奖惩管理 4. 业绩管理 5. 培训管理 6. 报表查询 三、总结 四、示例代码 1 前端VUE 2 后端SpringBootjava 3 数据库表 随着教育信息化的发展,传统的手工管理方式已经不能满足现代学校对教师…...
L0-Python-关卡材料提交
Python wordcount 函数的调试笔记 输入文本中的多行字符串处理 确保 text 使用了正确的三引号 “”",以便读取完整的多行字符串,而不是单行。字符串分割:split() 使用 split() 默认按空格分割单词,确保分割后每个元素都是字…...
【unity进阶知识6】Resources的使用,如何封装一个Resources资源管理器
文章目录 一、Unity资源加载的几种方式1、Inspector窗口拖拽2、Resources3、AssetBundle4、Addressables(可寻址资源系统)5、AssetDatabase 二、准备三、同步加载Resources资源1、Resources.Load同步加载单个资源1.1、基本加载1.2、加载指定类型的资源1.…...
ThreadLocal内存泄漏分析
一、ThreadLocal内存泄漏分析 1.1 ThreadLocal实现原理 1.1.1、set(T value)方法 查看ThreadLocal源码的 set(T value)方法,可以发现数据是存在了ThreadLocalMap的静态内部类Entry里面 其中key为使用弱引用的ThreadLocal实例,value为set传入的值。核…...
第 30 章 XML
第 30 章 XML 1.IE 中的 XML 2.DOM2 中的 XML 3.跨浏览器处理 XML 随着互联网的发展,Web 应用程序的丰富,开发人员越来越希望能够使用客户端来操作 XML 技术。而 XML 技术一度成为存储和传输结构化数据的标准。所以,本章就详细探讨一下 Ja…...
VMware下的ubuntu显示文字太小的自适应显示调整
我的情况 我使用的是4K的32寸显示器,分辨率为 3840 x 2160,ubuntu版本为18.04,默认的情况下系统分辨率为 3466 x 1842。 此时,显示的文字很小,虽然可以看清,但也比较吃力,在VMware窗口…...
外贸网站怎么搭建对谷歌seo比较好?
外贸网站怎么搭建对谷歌seo比较好?搭建一个网站自然不复杂,但要想搭建一个符合谷歌seo规范的网站,那就要多注意了,你的网站做的再酷炫,再花里胡哨,但如果页面都是js代码,或者页面没有源代码内容…...
如何创建网络白名单
网络白名单(Whitelist)是指允许通过网络访问的特定设备、IP地址、应用程序或网站。与黑名单(Blacklist)相反,白名单机制默认阻止所有连接,只有在白名单中明确允许的访问才能通过。这种策略可以提高网络的安…...
前端动态创建svg不起效果?
document.createElement(path);诸如此类的创建一般都是不太行的 我在创建这个之后,虽然在网页上是有相应的结构,但是完全不显示 一般正确的创建方式为 document.createElementNS(http://www.w3.org/2000/svg,path);在使用document.createElementNS(“ht…...
三、Drf request对象
3.1django和drf中的request的区别 django中的request:用户请求对象和参数 drf中的request:将django中的request加了一层封装,又加了一些其它的参数 drf中的request._requestdjango中的request 3.2创建url路由和CBV class UserView(APIView):def get(self,requ…...
CMIS5.2_光模块切应用(Application Selection and Instantiation)
目录 重要概念 DP配置、应用声明、应用码的区别 Control Set Provision 和 Commission ApplyDPInit 和 ApplyImmediate 判断应用是否切换成功 以800G光模块的3个应用对应的DP配置举例 1*800G应用: 2*400G应用: 8*100G应用: 应用声明…...
网络安全 DVWA通关指南 DVWA Weak Session IDs(弱会话)
DVWA Weak Session IDs(弱会话) 文章目录 DVWA Weak Session IDs(弱会话)Low LevelMedium LevelHigh LevelImpossible Level 参考文献 WEB 安全靶场通关指南 相关阅读 Brute Force (爆破) Command Injection(命令注入…...
828华为云征文|华为云 Flexus X 实例初体验
一直想有自己的一款的服务器,为了更好的进行家庭娱乐,甚至偶尔可以满足个人搭建开发环境的需求,直到接触到了华为云 Flexus X 云服务器。Flexus 云服务器 X 实例是面向中小企业和开发者打造的轻量级云服务器。提供快速应用部署和简易的管理能…...
欧科云链OKLink相约TOKEN2049:更全面、多元与安全
过去几日,OKLink 与全球 Web3 从业者与爱好者们相约狮城。在多场激动人心的活动上分享了我们的产品进展、有关于链上数据的专家观点以及打磨产品的经验。同时也听到了很多来自行业的宝贵声音。跟随我们的脚步,捕捉这充实一周的精彩瞬间: 1、…...
遥感影像-语义分割数据集:云数据集详细介绍及训练样本处理流程
原始数据集详情 简介:该云数据集包括150张RGB三通道的高分辨率图像,在全球不同区域的分辨率从0.5米到15米不等。这些图像采集自谷歌Earth的五种主要土地覆盖类型,即水、植被、湿地、城市、冰雪和贫瘠土地。 KeyValue卫星类型谷歌Earth覆盖区…...
【有啥问啥】SimAM(Similarity-Aware Activation Module)注意力机制详解
SimAM(Similarity-Aware Activation Module)注意力机制详解 引言 在计算机视觉领域,注意力机制通过引导模型关注图像中的关键区域,显著提升了模型处理和理解图像的能力。SimAM(Similarity-Aware Activation Module&a…...
鸿蒙应用开发,如何保存登录信息
在鸿蒙应用开发中,保存登录信息是实现用户自动登录、个性化展示等功能的基础。以下是一些常用的保存登录信息的方法: 一、全局状态管理 对于简单的应用,可以在全局范围内定义一个类(如UserManager),使用单…...
淘客网站怎么做淘口令/百度竞价排名又叫
编写安全的代码很困难,当你学习一门编程语言、一个模块或框架时,你会学习其使用方法。在考虑安全性时,你需要考虑如何避免代码被滥用,Python也不例外,即使在标准库中,也存在着许多糟糕的实例。然而…...
塘下春华网站建设/站长工具百科
Backdrill相关设置及Backdrill文档输出方法...
网站设计方案怎么做/整合营销案例举例说明
第五周任务 这周开始学习函数,这在任何一门语言中都是一个大头(在Java中我们称为方法)。 首先很重要的一点是,如果你像我一样习惯把自定义的函数放在main方法后面的话,那么一定要记得先声明函数。例如我现在定义了一个…...
wordpress term id/苏州网站建设书生商友
系统装的RED HAT LINUX 9 装为服务器类别 只选装了English语言支持 装好之后 用 SSH SECURE SHELL 连接到系统,发现打开有些文档里有乱码 ,而在系统本身却没有,于是修改/etc/systemconfig/i18n这个文件,在最后加入一行LC_ALLPOSIX,重启系统,再也没有乱码了 .转载于:https://bl…...
wordpress前台漏洞/郑州网络营销哪家正规
一、Wordcount练习 1.需求:通过hadoop分析文件中单词总数 1.要被分析的文件内容如图所示,每个单词之间以空格分开 2.实现的效果如图 2.代码实现 1.解决数据倾斜问题 考虑到在机器运行过程中 Reduce阶段每个相同的Key会由一个ReduceTask来处理,而java共有十六万个,其他的单词只有…...
哪些网站可以做批发衣服/网站软文是什么
第1关:生产者与消费者问题 本关任务:程序 4-1.c 模拟了 1 个生产者和 1 个消费者,请改写该程序,模拟 5 个生产者和 5 个消费者,它们共享一个包含 8 个缓冲区的缓冲池。产品以 4 位编号,最高位表示生产者编号、其他表示该生产者的产品号 #include <stdio.h> #in…...