OKsocket实践总结
OkSocket是github上socket使用比较多的一个Java库,旨在解决轻量级套接字通信问题,使开发人员能够更多地关注业务逻辑,而不是TCP通信原则和一些协议。
github项目中有一份作者自带的中文博客连接,但是其中文字部分还是没有太完整,故根据其英文文档和个人使用经验写这篇文章.
协议
我们必须自己定义的数据包协议,实现IReaderProtocol接口,说明headerLength和BodyLength(Payload length)
在demo程序中,数据包第一个字节代表Payload length(body length),后面的是具体的信息
/**
* 这个协议表示,数据包头第一个字节为包信息部长(Payload length)
*/
val myProtocol = object : IReaderProtocol {
/**
* 通过解析[header] 获取包体的长度并返回
* */
override fun getBodyLength(header: ByteArray, byteOrder: ByteOrder?): Int {
return header[0].toInt()
}
/**
* 包头的长度,里面应该含有数据体长度的信息
* */
override fun getHeaderLength() = 1
}
服务器部分
这部分描述使用OkSocket建立一个简单的服务器
开启监听
准备一个未使用的端口,并首先获得IRegister
val register =OkSocket.server(8088)
通过IRegister获取一个`IServerManager'
val manage = register.registerReceiver(object : ServerActionAdapter() {
/**
* 当服务器侦听您成功指定的端口时,将调用此方法。
*/
override fun onServerListening(serverPort: Int) {
LogUtils.i("端口$serverPort 开启监听成功!")
}
})
ServerActionAdapter是Server的一些行为监听类,可以按需求override.这里上面监听实现了,在端口监听开启成功时,打印日志.(处理客户端发送的消息也在这override)
开启监听
if (!manage.isLive) {
manage.listen()
}
处理消息