public class LocalSocketProvider
extends java.lang.Object
getLocalSocket()
拿到的Socket对象是健康有效的。
依据作者对MobileIMSDK API的设计理念,本类将以单例的形式提供给调用者使用。
限定符和类型 | 字段和说明 |
---|---|
static io.netty.handler.ssl.SslContext |
sslContext
开发者设置本对象可实现SSL/TLS加密传输,不设置则不开启SSL/TLS加密。
|
static int |
TCP_FRAME_FIXED_HEADER_LENGTH
MobileIMSDK中的TCP数据帧Headder(头部)字节长度(默认4字节)。
|
static int |
TCP_FRAME_MAX_BODY_LENGTH
MobileIMSDK中的TCP数据帧Body(数据体)的最大字节长度(默认最大6KB)。
|
限定符和类型 | 方法和说明 |
---|---|
void |
closeLocalSocket()
参见
closeLocalSocket(boolean) ,默认silent参数=ture。 |
void |
closeLocalSocket(boolean silent)
强制关闭本地Socket侦听。
|
static LocalSocketProvider |
getInstance() |
io.netty.channel.Channel |
getLocalSocket()
获得本地Socket的实例引用.
|
boolean |
isLocalSocketReady()
本类中的Socket对象是否是健康的。
|
static boolean |
isSsl()
是否开启SSL/TLS加密传输。
|
io.netty.channel.Channel |
resetLocalSocket()
重置并新建一个全新的Socket对象。
|
void |
setConnectionDoneObserver(MBObserver connectionDoneObserver)
设置连接完成后将被通知的观察者。
|
public static int TCP_FRAME_FIXED_HEADER_LENGTH
===== 【为了妥善解决TCP的半包、粘包经典问题,使用“数据包头Header+数据包体Body”的帧组织形式】 ====== 【即帧编码格式为】: Header(存放的是body数据长度,定长4字节int整数) + Body(真正数据内容,不定长,长度应在Header的最大值之内)。 【举例】: 以发送一个字母“A”(即body为“A”)为例,以下是编码后的完整数据帧形式: +------- Header (4 bytes) -------|--------- Body (1 bytes) ----------+ + 0x0000 0000 0000 0001 | 0x0041 + +------ (内容为int整数1) -------|-------(内容为字母“A”的ASCII码)------+ 【有关Netty实现TCP半包、粘包的资料,请见】: 1)文章:最通用TCP黏包解决方案:LengthFieldBasedFrameDecoder和LengthFieldPrepender 2)源码1:LengthFieldBasedFrameDecoder 3)源码2:LengthFieldPrepender ============================================ 【END】 =======================================
public static int TCP_FRAME_MAX_BODY_LENGTH
关于MobileIMSDK中的数据帧格式和定义,请见 TCP_FRAME_FIXED_HEADER_LENGTH
字段的详细说明
public static io.netty.handler.ssl.SslContext sslContext
isSsl()
将返回true。
特别注意:请在MobileIMSDK初始化时设置本对象!
public static LocalSocketProvider getInstance()
public void setConnectionDoneObserver(MBObserver connectionDoneObserver)
设置本观察者的目的,是因为netty连接的过程是异常完成,有时希望在连接完成时就能立即执行想 要的逻辑,那么设置本观察者即可(在某次连接最终完成前,本参数的设置都会覆盖之前的设置,因为 只有这一个观察者可以用哦)。
connectionDoneObserver
- 观察者对象public io.netty.channel.Channel resetLocalSocket()
Channel
,
ConfigEntity.localPort
public boolean isLocalSocketReady()
public io.netty.channel.Channel getLocalSocket()
本方法内封装了Socket有效性判断以及异常处理等,以便确保调用者通过本方法拿到的Socket对象是健康有效的。
isLocalSocketReady()
,
resetLocalSocket()
public void closeLocalSocket()
closeLocalSocket(boolean)
,默认silent参数=ture。public void closeLocalSocket(boolean silent)
getLocalSocket()
将会返回一个全新的Socket对象引用。
本方法通常在两个场景下被调用:
1) 真正需要关闭Socket时(如所在的APP通出时);
2) 当调用者检测到网络发生变动后希望重置以便获得健康的Socket引用对象时。
silent
- true表示打印log,否则静默执行无需打印logDatagramSocket.close()
public static boolean isSsl()