public class GatewayTCP extends Gateway
限定符和类型 | 字段和说明 |
---|---|
protected io.netty.channel.EventLoopGroup |
__bossGroup4Netty
框架专用内部变量:
bossGroup用来接收进来的连接 (EventLoopGroup是用来处理IO操作的线程池 ) .
|
protected io.netty.channel.Channel |
__serverChannel4Netty
框架专用内部变量:
Netty服务的服务器Channel引用.
|
protected io.netty.channel.EventLoopGroup |
__workerGroup4Netty
框架专用内部变量:
workerGroup用来处理已经被接收的连接 (EventLoopGroup是用来处理IO操作的线程池 ) .
|
protected io.netty.bootstrap.ServerBootstrap |
bootstrap
启动器
|
static int |
PORT
服务端TCP监听端口,默认8901。
|
static int |
SESION_RECYCLER_EXPIRE
TCP Session的空闲超时时长(单位:秒),默认20秒。
|
static io.netty.handler.ssl.SslContext |
sslContext
开发者设置本对象可实现SSL/TLS加密传输,不设置则不开启SSL/TLS加密。
|
static int |
TCP_FRAME_FIXED_HEADER_LENGTH
MobileIMSDK中的TCP数据帧Headder(头部)字节长度。
|
static int |
TCP_FRAME_MAX_BODY_LENGTH
MobileIMSDK中的TCP数据帧Body(数据体)的最大字节长度。
|
SOCKET_TYPE_IN_CHANNEL_ATTRIBUTE, SOCKET_TYPE_IN_CHANNEL_ATTRIBUTE_ATTR, SOCKET_TYPE_TCP, SOCKET_TYPE_UDP, SOCKET_TYPE_WEBSOCKET
构造器和说明 |
---|
GatewayTCP() |
限定符和类型 | 方法和说明 |
---|---|
void |
bind()
绑定端口、启动服务。
|
void |
init(ServerCoreHandler serverCoreHandler)
初始化 Netty的服务辅助启动类。
|
protected io.netty.channel.ChannelHandler |
initChildChannelHandler(ServerCoreHandler serverCoreHandler)
初始化针对Netty客户端的handler链。
|
static boolean |
isSsl()
是否开启SSL/TLS加密传输。
|
void |
shutdown()
关闭本TCP网关的监听并释放其所占资源。
|
$, getGatewayFlag, getSocketType, isSupportTCP, isSupportUDP, isSupportWebSocket, isTCPChannel, isUDPChannel, isWebSocketChannel, removeSocketType, setSocketType
public static int PORT
请在 ServerLauncher.startup()
方法被调用前被设置,否则将不起效.
public static int SESION_RECYCLER_EXPIRE
表示一个用户在非正常退出、网络故障等情况下,服务端判定此用户不在线的超时时间。 此参数应与客户端的KeepAliveDaemon.KEEP_ALIVE_INTERVAL配合调整,为防止产生误判, 建议本参数设置为“客户端的KeepAliveDaemon.KEEP_ALIVE_INTERVAL + 典型客户网络延迟时间”, 比如默认值20就是等于“15 + 5”(即服务端允许在最最极端的情况下连续心跳两次超时后将被误判 为掉线!)。
本值不宜过短,太短则会导致客户端因心跳丢包而误判为掉线,进而触发客户端的重登机制。原则 上设置的长一点更有保证,但设置过长的话会导致服务端判定用户真正的非正常退出过于晚了,带 给用户的体验就是明明好友非正常退出了,过了好长时间才能感知到他已退出。
请在 ServerLauncher.startup()
方法被调用前被设置,否则将不起效.
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服务端初始化时设置本对象!
protected final io.netty.channel.EventLoopGroup __bossGroup4Netty
作为全局变量的目的,当前仅用于关闭服务器时来释放此连接池对应的资源,别无它用。
ServerLauncher.startup()
protected final io.netty.channel.EventLoopGroup __workerGroup4Netty
作为全局变量的目的,当前仅用于关闭服务器时来释放此连接池对应的资源,别无它用。
ServerLauncher.startup()
protected io.netty.channel.Channel __serverChannel4Netty
作为全局变量的目的,当前仅用于关闭服务器时来释放此Channel对应的资源,别无它用。
protected io.netty.bootstrap.ServerBootstrap bootstrap
public void init(ServerCoreHandler serverCoreHandler)
init
在类中 Gateway
ServerLauncher.initGateways()
public void bind() throws java.lang.Exception
Gateway
protected io.netty.channel.ChannelHandler initChildChannelHandler(ServerCoreHandler serverCoreHandler)
如有需要,子类可以重写此类实现自已的Inbound Hander链接逻辑。
#init()
,
MBTCPClientInboundHandler
,
io.netty.handler.timeout.ReadTimeoutHandler.ReadTimeoutHandler
,
io.netty.channel.ChannelInitializer.ChannelInitializer
public static boolean isSsl()