GDNet 的Send和SendRT,SendERT,SendERTP,AddOperation使用介绍

6 篇文章 0 订阅
6 篇文章 0 订阅

有学习的伙伴们,有的会不知道什么使用Send和SendRT,SendERT,SendERTP,AddOperation的方法, 这几个方法是GDNet框架的主要方法,必须要会使用哦!

我在这里就给学习的伙伴们详细讲下Send和SendRT,SendERT,SendERTP,AddOperation方法的使用。

 

服务器的Send方法:

Send方法是客户端与服务器通讯的方式之一

Send方法的第一个参数client:参数client为客户端的对象, 也就是你要给client发送数据,服务器上的client是成千上万个的,当哪个client客户端发送数据给服务器,服务器都会取到对应的client对象,你很方便就可以使用client作为Send的第一个参数

Send方法的第二个参数cmd:这个cmd为网络命令(指令),cmd网络必须参考NetCmd指令类来定义和传参,你可以添加自己的代码指令,添加指令之后,必须在对方进行处理, 比如客户端Send, 你就要在服务器解析。 如果是服务器Send, 你就要在客户端解析

Send方法的第三个参数func:function参数为指定调用远程端的函数名称, 如果客户端Send, 服务器必须要有func字符串指定的函数, 比如客户端Send("Test"); 那么服务器必须要有void Test()方法接收,Test方法加上[Rpc]特性即可

Send方法的第四个参数pars:pars参数是远程函数的参数对象, pars参数必须要指定对远程机器端的真实参数,如果指定参数不一致或者不匹配,都会调用失败。(pars参数不能传入基于unity的Object类的对象,在unity中只能使用少数的结构体类型, 如Vector2,3,4, Rect, Color....)

 

 

SendRT方法:

SendRT方法是实现了Udp协议的可靠传输功能,例如客户端SendRT一个网络数据,服务器没有收到,丢包了,那么客户端会在1秒后再次发送第2个数据包,如果还是没有收到,则再次进行发送第3,4...个包,当发送到30个包后还是丢包的话,那么可靠传输就会停止发送,同时也宣布可靠传输发送失败! 那么如果服务器收到数据呢? 如果服务器收到数据后,会回调(发送确认数据给客户端),这样客户端就会知道,这个数据包服务器已经收到, 那么如果服务器发送下来的数据丢失了呢?如果服务器发送的数据丢失的话,客户端还是会按照前面说的那样,一直发送数据给客户端,知道30次后依然没有回调,则提示可靠失败。

SendRT方法的client参数:参数client为客户端的对象, 也就是你要给client发送数据,服务器上的client是成千上万个的,当哪个client客户端发送数据给服务器,服务器都会取到对应的client对象,你很方便就可以使用client作为Send的第一个参数

SendRT方法的cmd参数:参数cmd跟Send方法有点不一样,只能使用两种枚举类型, 在服务器类里面调用 或 在客户端类里面调用。 如果客户端SendRT的cmd = RTCmd.PublicRT, 就会在服务器类调用, 如果SendRT的cmd = RTCmd.EntityRT就会在NetPlayer派生类里面调用,也就是你自己定义的Player类。

SendRT方法的func参数:function参数为指定调用远程端的函数名称, 如果客户端Send, 服务器必须要有func字符串指定的函数, 比如客户端Send("Test"); 那么服务器必须要有void Test()方法接收,Test方法加上[Rpc]特性即可

SendRT方法的pars参数:pars参数是远程函数的参数对象, pars参数必须要指定对远程机器端的真实参数,如果指定参数不一致或者不匹配,都会调用失败。(pars参数不能传入基于unity的Object类的对象,在unity中只能使用少数的结构体类型, 如Vector2,3,4, Rect, Color....)

 

SendERT方法:

SendERT方法为实体可靠传输, SendERT方法可以发送一个大文件数据,而且还带有func方法pars参数进行解释buffer里面的字节数组内容,这个SendERT方法是SendRT方法的升级版。

SendERT方法的client参数:参数client为客户端的对象, 也就是你要给client发送数据,服务器上的client是成千上万个的,当哪个client客户端发送数据给服务器,服务器都会取到对应的client对象,你很方便就可以使用client作为Send的第一个参数

SendERT方法的cmd参数:参数cmd跟Send方法有点不一样,只能使用两种枚举类型, 在服务器类里面调用 或 在客户端类里面调用。 如果客户端SendRT的cmd = RTCmd.PublicRT, 就会在服务器类调用, 如果SendRT的cmd = RTCmd.EntityRT就会在NetPlayer派生类里面调用,也就是你自己定义的Player类。

SendERT方法的progress参数:progress参数为发送大文件数据时的进度值,进度值是委托方法,可以监听当前发送的进度和状态,如果状态可靠失败,状态会变成失败状态,如果发送成功,则会是成功状态。

SendERT方法的func参数:function参数为指定调用远程端的函数名称, 如果客户端Send, 服务器必须要有func字符串指定的函数, 比如客户端Send("Test"); 那么服务器必须要有void Test()方法接收,Test方法加上[Rpc]特性即可

SendERT方法的pars参数:pars参数是远程函数的参数对象, pars参数必须要指定对远程机器端的真实参数,如果指定参数不一致或者不匹配,都会调用失败。(pars参数不能传入基于unity的Object类的对象,在unity中只能使用少数的结构体类型, 如Vector2,3,4, Rect, Color....)

 

SendERTP方法:

下图SendERTP方法参数有点多! SendERTP是SendERT的升级版,

SendERTP方法可以通知远程机器的进度值,告诉远程机器的当前下载进度,比如我们使用的浏览器下载文件,是不是知道下载文件的进度? 这个方法就是处理下载文件这样的功能。

SendERTP方法的client参数:参数client为客户端的对象, 也就是你要给client发送数据,服务器上的client是成千上万个的,当哪个client客户端发送数据给服务器,服务器都会取到对应的client对象,你很方便就可以使用client作为Send的第一个参数

SendERTP方法的cmd参数:参数cmd跟Send方法有点不一样,只能使用两种枚举类型, 在服务器类里面调用 或 在客户端类里面调用。 如果客户端SendRT的cmd = RTCmd.PublicRT, 就会在服务器类调用, 如果SendRT的cmd = RTCmd.EntityRT就会在NetPlayer派生类里面调用,也就是你自己定义的Player类。

SendERTP方法的progress参数:progress参数为发送大文件数据时的进度值,进度值是委托方法,可以监听当前发送的进度和状态,如果状态可靠失败,状态会变成失败状态,如果发送成功,则会是成功状态。

SendERTP方法的buffer参数:buffer参数是你要发送的文件字节数组,我们使用的文件都是有字节数组组成的

SendERT方法的func参数:function参数为指定调用远程端的函数名称, 如果客户端Send, 服务器必须要有func字符串指定的函数, 比如客户端Send("Test"); 那么服务器必须要有void Test()方法接收,Test方法加上[Rpc]特性即可

SendERTP方法的progressFunc参数:progressFunc参数是指定要调用远程机器的函数名,如果这函数名不存在,则会提示

SendERTP方法的progressItem参数:progressItem参数是指定要调用远程机器的一个辅助参数,远程端必须要这样声明 progressFunc(object progressItem, int progressValue) 的方法, progressFunc是你自己指定的名称,object progressItem参数可以使用真实类型, 就是SendERTP的时候传入的参数值的类, 就会变成progressFunc(xxx progressItem, int progressValue)

SendERTP方法的pars参数:pars参数是远程函数的参数对象, pars参数必须要指定对远程机器端的真实参数,如果指定参数不一致或者不匹配,都会调用失败。(pars参数不能传入基于unity的Object类的对象,在unity中只能使用少数的结构体类型, 如Vector2,3,4, Rect, Color....)

 

AddOperation方法:

AddOperation方法是Send方法的优化版, 网络帧同步,状态同步的网络数据传输使用方法。

AddOperation方法你调用时是不会直接发送数据给客户端的,如果使用Send就会直接发送,为了网络的均衡,AddOperation方法每秒只发送20次数据,你所调用的AddOperation方法,只是把你要发送的数据添加到帧列表里面,等待时间到后会自动发送给客户端,发送后会清除掉已经发送的数据列表。如果想修改每秒发送次数,可修改GameManager的Run方法参数

 

AddOperation方法的参数,上面基本全面盖过了,请看Send方法介绍。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_21977253

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值