Mirror学习笔记(二) 传输协议

在这里插入图片描述

文章目录

  • 一、KCP传输协议
  • 二、Telepathy 传输协议
  • 三、WebSockets传输协议
  • 四、多路复用传输:
  • 五、延迟模拟传输:
  • 六、Ignorance协议
  • 七、LiteNetLib协议
  • 八、FizzSteamworks协议
  • 九、FizzyFacepunch协议
  • 十、加密协议
  • 十一、Edgegap协议


一、KCP传输协议

KCP是Mirror是默认的传输协议
在这里插入图片描述

协议优势:
1.100%兼容C#
2.适用于除了WebGL外的所有平台
3.重测覆盖率83.5%
4.速度极快
5.非常简单
6.几乎免费分享

KCP是一种可靠协议,可达到平均延迟降低30~40%,最大延迟减少3倍的传输效率。
代价是比TCP多消耗10~20%的带宽。采用纯算法实现,不负责底层收发,要求用户为低层数据自定义传输方式,并以回调的方式提供给CKP.

使用方式:
将CKP传输组件添加到NetworkManager中。
取消组织UDP(不是TCP),默认端口7777


二、Telepathy 传输协议

Telepathy设计参考了Kiss原则
Telepathy快速且可靠,专为MMO规模的网络而设计
Telepathy发送任何形式的内容都将以相同的方式接收
Telepathy使用原生C#编写,可直接应用于Unity
Telepathy可在GitHub上找到

Telepathy最初是在UDP中度过了地狱的三年后,为UMMORPG而设计的。
Telepathy在以下优势:
稳定无错:仅使用400行代码
高性能:可以处理数以千计的连接和包
并发:每一个连接都使用一个线程,它可以大量使用多梳处理器
很简单:Telepathy处理好一切,你只需要调用connect/GetNextMessage/Disconnect.
基于池:如发送10个字节后再发2个,那么另一端将收到10个再收到2个字节,而不会一次收到12个

MMORPG的制作非常困难,创建了Telepathy这样我们就不用再担心网络底层了


三、WebSockets传输协议

使用WebSocket协议的镜像传输,从Unity WebGl中构建,然后从浏览器中启用多人游戏。
在这里插入图片描述

SSL设置已过时,可能会在将来的版本中删除。

服务器设置:
指定基于websocket的游戏监听端口

客户端设置:
设置允许用户自定义Web游戏客户端行为。
如可以引入代理服务器。

载入记录:
支持的日志级别:
None、Error、Warn(默认)、Info、Verbose、Flood

可以使用下拉列表或代码设置日志级别。Mirror.SimpleWeb.Log.level
建议将级别设置为Verbose Flood Info Warn

将日志使用为None时要特别小心 .


四、多路复用传输:

多路复用本身不是传输,但他允许您组合其他传输,以便客户端可以通过其中一个连接到您的服务器。
常用的方式是同时监听WebGL和移动端/桌面端服务器。

实现方法:
1.如果尚未将有NetworkManager的游戏添加 场景中则将其添加到场景中
2.默认情况下Mirror会将CKP传输添加到您的NetworkManager游戏对像中
3.将 Multiplex Transport组件添加到游戏对像中
4.在NetworkManager中分配Multiplex管理
5.将Websocket传输组件添加到到游戏对像
6.将KCP传输逐渐作为第一个通路添加到Multiplex Transport中
7.将Websocket传输作用第二个通路添加到Multiplex Transport中
配置如下图所示:
在这里插入图片描述


五、延迟模拟传输:

Mirror的Latency Simulation提供了在非理想状态下测试项目的条件。
将其添加到NetworkManager,将其拖至NetworkManager.transport中
他可以模拟延迟(毫秒)、数据丢包、数据包加扰、重新排序等问题
在这里插入图片描述在这里插入图片描述


六、Ignorance协议

UPD被理解为一种“破碎”的数据传输协议,没有时序性,可靠性。
而Ignorance是一种可靠的UDP传输协议,并且它提供了可靠的和不可靠的UDP协议。
为什么Ignorance由于Unity LLAPI?
Unity旧的LLAPI效率底的可怕,大量测试更多项目中UnityLLAPI会降低性能。
而LLAPI是闭源的,这意味则Mirror无法对其进行修改,从而开发出了Ignorance协议。
谁在开发Ignorance?
Coburn是主要的开发商。
什么情况下使用可靠的UDP而不是TCP?
1.当你实时通讯更看重速度而不是可靠性时
2.当然需要频繁发送时
3.当你需要自定义消息时
4.如果您的游戏需要数据软管时
什么情况下使用TCP而不是用可靠的UDP ?
1.当你有关键任务时
2.如果你需要可行的网络协议
3.如果你是偏执逛
4.你需要让每个人都同步时


七、LiteNetLib协议

基于UDP拓展出的协议,略过…


八、FizzSteamworks协议

Mirror的FizzSteamworks传输协议,略过…


九、FizzyFacepunch协议

也是Mirror的FizzyFacepunch传输协议,略过…


十、加密协议

加密协议本身不是协议,但允许加密流进行传输。
传输协议通过ECDH和HKDF-SHA256进行非对称秘钥交换,以安全地派生一个通用的256位对称秘钥,然后将其用于具有96位随机数和128位mac.
不依赖于连接协议,加密与顺序/可靠性,因此适用于各种传输。握手完成后,连接完全安全的。为了校验安全性,至少有一方需要验证公钥(通常是客户端验证服务器密钥)

当使用传输协议,您需要将协议添加到Inner字段中,然后将Encryption Transport分配给Network Manager中的Transport.中间通过了Encryption进行加密。

验证服务器公钥,如果不验证公钥,初始握手容易收到MITM攻击。官方建议尽量在所有托管模式下验证服务器密钥。

非常方便使用Mirror为用户提供了3种验证模式:
关闭:默认关闭,开发时使用
列表:公钥是在构建中受信任密钥列表进行验证的。
在这里插入图片描述

回调:在些模式下当客户端连接到时,它将调用毁掉,该回调应返回有效密钥。
EncryptionTransport.onClientValidateServerPubKey true
这提供了最大的灵活性,并允许您通过在连接之前交换公钥来验证,例如从大厅服务器或登录API进行验证。
客户端或服务器后端可以从中检索指纹(以及序列化公钥本身):
EncryptionTransport.EncryptionPublicKeyFingerprint
EncryptionTransport.EncryptionPublicKey


十一、Edgegap协议

Edgegap的分布式断电服务在世界各地的许多地点提供中断续传服务,而不必担心NAT或延迟问题。
为了使用中继服务,您需要设置自己的以按需要启动中继会话,或者可以使用Edgegap的Lobby或Matchmaker服务为您执行此操作:
Mirror提供以下创术来与中继服务进行交互:
EdgegapRelay:
使用KCP的准系统继电器传输,它需要你自己设置好拉力会话并与所有玩家沟通详细信息。
完成此操作后,再决定是否持有设置。
Edgegap Lobby:
使用Edgegap Lobby 提供了简单易用的中继服务
如果你只需要没有匹配的点对点/玩家托管的大厅,基本上不需要设置。
使用方式:
部署大厅服务,通过Edgegap API手册执行操作,也可以传输上内置的UI.
在这里插入图片描述

点击后弹窗:
在这里插入图片描述

只需要输入你的EdgegapAPI密钥和你选择的唯一大厅名字(LobbyName),然后点击创建,就会部署完成,然后将为填写上大厅的URL.
然后就准备好了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3281064.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

热力图大揭秘!Matplotlib教你如何画出让数据‘火辣辣‘的激情图!

1. 引言 嘿,小伙伴们!今天咱们来点不一样的,走进Matplotlib的神奇世界,一起绘制那让人热血沸腾的热力图!别误会,这可不是什么天气预报图,而是让数据“火辣辣”展现自我的秘密武器。想象一下&am…

Adobe XD安装破解

文章目录 下载链接安装教程打开软件 下载链接 通过百度网盘分享的文件:Adobe XD 57.rar 链接:https://pan.baidu.com/s/14v_8EeKSyAtZoXT2nofCtQ 提取码:6qxx 安装教程 以管理员身份运行 安装完成后点击关闭 稍微等待一会,不…

linux编写shell脚本字段部署redis6.x版本,docker使用shell脚本一键自动部署redis

1.先创建部署脚本 touch redis.sh2.粘贴部署脚本内容到redis.sh echo "在线安装redis开始...." docker pull redis:6.2.1 sudo mkdir -p /home/admin/redis/{data,conf} sudo touch /home/admin/redis/conf/redis.conf echo " #注释掉这部分,这是限…

Yolov5-v7.0使用CBAM注意力机制记录

Yolov5-v7.0使用CBAM注意力机制记录 一、CBAM实现代码 在model/common.py文件中加入如下代码: #############CBAM注意力机制############## class ChannelAttention(nn.Module):def __init__(self, in_planes, ratio16):super(ChannelAttention, self).__init__(…

力扣高频SQL 50题(基础版)第三十三题

文章目录 力扣高频SQL 50题(基础版)第三十三题610.判断三角形题目说明实现过程准备数据实现方式结果截图 力扣高频SQL 50题(基础版)第三十三题 610.判断三角形 题目说明 表: Triangle ----------------- | Column Name | Typ…

pytorch学习笔记2 创建tensor

1 从numpy导入 anp.array([2,3.3]) torch.from_numpy(a)bnp.ones([2,3]) torch.from_numpy(b)2从list导入 torch.tensor([2.,3.2]) torch.FloatTensor([2.,3.2]) torch.tensor([[2.,3.2],[1.,22.3]]) 3 未初始化的随机数据 Torch.empty()Torch.FloatTensor(d1,d…

【MySQL】索引 【下】{聚簇索引VS非聚簇索引/创建主键索引/全文索引的创建/索引创建原则}

文章目录 1.聚簇索引 VS 非聚簇索引经典问题 2.索引操作创建主键索引唯一索引的创建普通索引的创建全文索引的创建查询索引删除索引索引创建原则 1.聚簇索引 VS 非聚簇索引 之前介绍的将所有的数据都放在叶子节点的这种存储引擎对应的就是 InnoDB 默认存储表数据的存储结构。 …

MySQL从jsonarray获取某个字段的所有数据

表结构。表里的order_goods_info_vo_list是jsonarray字段 CREATE TABLE pdd_charge_back_bantuo (id int(11) NOT NULL AUTO_INCREMENT,shopname varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 店铺名,charge_back_sn varchar(64) COLLATE utf8mb4_bin DEFAULT NULL …

2000-2023年上市公司财务困境数据Oscore模型(含原始数据+计算结果)

2000-2023年上市公司财务困境数据Oscore模型(含原始数据计算结果) 1、2000-2023年 2、指标:证券代码、证券简称、统计截止日期、是否发生ST或*ST或PT、是否发生暂停上市、行业代码、行业名称、上市日期、总资产(元)、…

Docker Desktop安装(通俗易懂)

1、官网 https://www.docker.com/products/docker-desktop/ 2、阿里云镜像 docker-toolbox-windows-docker-for-windows安装包下载_开源镜像站-阿里云 1. 双击安装文件勾选选项 意思就是: Use WSL 2 instead of Hyper-V (recommended) : 启用虚拟化,…

IDEA对线上项目远程debug

1、在启动脚本上添加以下配置内容 -agentlib:jdwptransportdt_socket,servery,suspendn,address*:5005 nohup java -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 -jar test.jar > misc.out & 2、在IDEA中进行配置 (1)选择远程…

红外激光模组如何升级为现代科技的璀璨明珠

在日新月异的科技领域中,红外激光模组以其独特的应用价值和卓越的性能,成为了众多行业的宠儿。从通信、测距、监控到医疗,红外激光模组以其广泛的应用场景,不断推动着现代科技的进步与发展。接下来我们就跟着鑫优威一起来了解一下…

详解Qt 之QByteArray

文章目录 详解Qt之QByteArray前言QByteArray概念作用为什么需要 QByteArrayQByteArray 的主要函数和成员函数列表 示例代码示例 1:字节数组的基本操作示例 2:数据编码和解码示例 3:字节数组的字符串操作 更多用法... 总结 详解Qt之QByteArray…

vue3+fetch请求+接收到流式的markdown数据+一边gpt打字机式输出内容,一边解析markdown语法+highlight.js实现代码高亮

这个问题终于解决了!好开心。 先看最终效果: video_20240724_141543_edit 项目背景:vue3 场景:像gpt一样可以对话,当用户发送问题之后,ai回复,ai是一部分一部分回复,像打印机式输出…

微服务-服务拆分-服务远程调用

查询订单demo 通过Bean的方式将RestTemplate注册为Spring的一个对象,即注入Spring容器(要写在配置类中,启动类本身就是配置类)。然后在任何地方都可以注入该对象使用。 Eureka注册中心 Eureka服务搭建 Eureka客户端注册 配置服务…

Java与模式及其应用场景知识点分享(电子版)

前言 Java 编程语言自1995年问世以来,其成功好像任何编程语言都无法媲美。生逢其时(互联网的兴起)固然是一方面的原因,而Java吸收总结了前人的经验教训,反映了最新技术(the state ofthe art),对其受到欢迎和采用,恐怕…

如何在基于滤波框架的绝对定位系统中融合相对观测

文章目录 1 LIO、VIO propagation来代替IMU propagation2 TRO paper: Stochastic Cloning Kalman filter【有待填坑】 以无人驾驶定位系统为例,融合gnss,imu,轮速,camera LaneMatch(frame to map),lidar scan match(fr…

大数据-55 Kafka sh脚本使用 与 JavaAPI使用 topics.sh producer.sh consumer.sh kafka-clients

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

如何有效管理众多账号密码:选择适合你的密码管理工具

在如今的数字化时代,我们的生活几乎离不开各种互联网应用和服务。从社交媒体到在线银行,从购物网站到工作平台,每个应用都要求我们注册账号并设置密码。 随着账号数量的不断增加,管理这些密码成为了一个令人头疼的问题。幸运的是…

【运维指南】常见的防火墙端口操作

每当一个应用程序想通过网络访问自己时,它就会申请一个 TCP/IP 端口,这意味着该端口不能被其他任何程序使用。那么,如何检查开放的端口,看看哪个应用程序已经在使用它呢? Windows 查看端口使用情况和进程名称 netst…