有关KCP协议,可以参阅KCP协议。
目前比较成熟完备的解决方案是kcptun。kcptun在kcp协议的基础止,做了很多优化,包括前向纠错(FEC),差分服务代码点(DSCP),加解密,压缩。本文讲述把kcptun移植到Android端的过程。
1.Go环境准备
kcptun本身是个Go项目,而Go项目本身是支持移植到Android或iOS客户端作为第三方库使用的。
1. Go语言环境安装
下载安装https://golang.google.cn/dl/,记得把go配置到环境变量中方便使用。
2.GoMobile工具安装
GoMobile工具用于编译和运行Android和iOS应用。
首先安装:
go get golang.org/x/mobile/cmd/gomobile
成功后:
gomobile init
如果安装失败,通常是网络问题,可以使用国内镜像:
a. 安装gopm
go get -u github.com/gpmgo/gopm
b. 用gopm get -g 代替go get
gopm get -g golang.org/x/net
也可以简单的从github上克隆相应的为库到gopath目录下。
2. Go项目编译
客户端只是kcptun的client部分。将kcptun下的client文件夹放到gopath的go/src/golang.org/x/mobile/example/目录下。
开始编译之前做一些小修改。
- 修改client下的三个文件,把代码中的package main改成别的包名,如package kcpclient,否则编译不过。
- 修改main.go,把main方法改名为:Run,main方法是启动kcpclient的唯一入口,改成大写字母开头的方法才会暴露出来给Android使用。
- 在main.go预定义代码中定义一个配置路径属性CONFIGPATH,修改Run方法代码片段:
if c.String("c") != "" {
err := parseJSONConfig(&config, c.String("c"))
checkError(err)
}else if CONFIGPATH != "" {
err := parseJSONConfig(&config, CONFIGPATH)
checkError(err)
}
这里加入的CONFIGPATH属性,并且暴露给客户端,可以在启动kcp client前通过setCONFIGPATH,传入配置的json文件路径,对kcp client进行自定义参数配置。
上面修改完成后,进入到client目录,执行
gomobile bind -target=android
编译完成后,得到kcpclient.aar以及kcpclient-sources.jar。
3.移植到Android端使用
把kcpclient.aar和kcpclient-sources.jar加入依赖。
启动kcp client是个网络操作,所以要放到子线程进行操作。最简单的做法是:
new Thread() {
@Override
public void run() {
super.run();
//这里设置自己的kcp client配置,也可不调用,使用默认配置
Kcpclient.setCONFIGPATH("xxxx");
Kcpclient.run();
}
}.start();
有疑问加站长微信联系(非本文作者)