connect: 网络不可达_应用RTTP协议解决网络游戏的延迟问题

项目地址:https://github.com/rtttech/rttp

RTTP特点:

  • 数据传输延迟低,官方给出的测试数据显示,在丢包率10%-20%的网络状况下,rttp的传输延迟仍保持在50毫秒以下,同样的环境下,TCP的传输延迟已达到几百毫秒,完全无法正常游戏。

9a98efe20eb1708bd970361640e91b10.png

d1f925afb2aa70e171d02093a53a75f2.png
  • 数据传输过程中客户端IP和端口发生变化不会对已建立的连接有任何影响,特别适合手机端游戏。TCP在这种情况下一定会出现连接中断的情况。
  • 传输速度快,高峰时段数据传输速度是TCP的10倍以上。
  • 高性能,单线程支持并发连接2000以上。
  • 简单易用,接口类似于TCP。
  • 不依赖于具体的传输协议,一般情况下使用UDP来传输数据包,但使用raw socket,甚至ICMP完全可行。

使用方法:

  1. 初始化RTTP,整个进程只需要调用一次:

int rt_init(const char* str, int len)

2. 设置回调函数,整个进程只需要调用一次:

void rt_set_callback(socket_event_callback *event_callback, send_data_callback *send_proc)

event_callback用于通知RTTP socket状态变化,函数原型:

void socket_event_callback(RTSOCKET socket, int event)一共存在4种事件:连接成功,可读,可写,出错

send_proc用于发送数据包,RTTP协议栈调用该函数发送数据包,函数原型:

void send_proc(RTSOCKET socket, const char * buffer, int len, const char* addr, int addr_len)

3. 创建RTTP socket:

RTSOCKET rt_socket(int mode);
该函数返回创建成功的RTTP socket句柄

4. 和服务器端建立连接:

int rt_connect(RTSOCKET s, const char *to, int tolen)

RTTP协议栈并不直接使用to和tolen指定的地址,该地址会被send_proc回传给使用者,连接成功后,RTTP协议栈会通过event_callback回调函数通知连接成功事件

5. 输入数据包:

使用者每收到一个UDP包(不限于UDP)时,通过rt_incoming_packet函数通知RTTP协议栈

RTSOCKET rt_incoming_packet(const char * buffer, int len, const char *from, int fromlen, void* userdata)

对于服务器端来说,如果有新的RTTP连接接入,这个函数将返回一个新的RTTP socket句柄

6. 输入定时信号:

void rt_tick()

官方文档建议10毫秒左右调用一次

7. 关闭RTTP socket:

void rt_close(RTSOCKET s)

8. 发送数据:

int rt_send(RTSOCKET s, const char * buffer, int len, int flag)

连接建立成功后,可通过rt_send发送数据包,返回发送成功的字节数,-1表示当前不可发送,应该等RTTP协议栈通知可写事件后再发

9. 接收数据:

int rt_recv(RTSOCKET s, char * buffer, int len, int flag)

当RTTP协议栈通知可读事件后,可通过该函数从RTTP socket接收数据,返回接收到缓冲区中的字节数,-1表示当前无可读数据,应该等可读通知后再接收,0表示连接关闭。

其他应用场景:

RTTP协议在其它时延敏感并且要求可靠传输的场合比如直播推流,远程数据传输等,都有不俗的表现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值