public class GatewayUDP extends Gateway
限定符和类型 | 字段和说明 |
---|---|
protected io.netty.channel.EventLoopGroup |
__bossGroup4Netty
框架专用内部变量:
bossGroup用来接收进来的连接 (EventLoopGroup是用来处理IO操作的线程池 ) .
|
protected io.netty.channel.Channel |
__serverChannel4Netty
框架专用内部变量:服务器Channel引用.
|
protected io.netty.channel.EventLoopGroup |
__workerGroup4Netty
框架专用内部变量:
workerGroup用来处理已经被接收的连接 (EventLoopGroup是用来处理IO操作的线程池 ) .
|
protected io.netty.bootstrap.ServerBootstrap |
bootstrap
启动器
|
static int |
PORT
服务端UDP监听端口,默认7901。
|
static int |
SESION_RECYCLER_EXPIRE
UDP Session的空闲超时时长(单位:秒),默认10秒。
|
SOCKET_TYPE_IN_CHANNEL_ATTRIBUTE, SOCKET_TYPE_IN_CHANNEL_ATTRIBUTE_ATTR, SOCKET_TYPE_TCP, SOCKET_TYPE_UDP, SOCKET_TYPE_WEBSOCKET
构造器和说明 |
---|
GatewayUDP() |
限定符和类型 | 方法和说明 |
---|---|
void |
bind()
绑定端口、启动服务。
|
void |
init(ServerCoreHandler serverCoreHandler)
初始化 Netty的服务辅助启动类。
|
protected io.netty.channel.ChannelHandler |
initChildChannelHandler(ServerCoreHandler serverCoreHandler)
初始化针对Netty客户端的handler链。
|
void |
shutdown()
关闭本UDP网关的监听并释放其所占资源。
|
$, 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 * (2或3) + 典型客户网络延迟时间”,比如默认值10就是等于“3 * 3 + 1”(即服务端允许在最最极端的 情况下即使连丢3个包也不会被误判为掉线!)。
本值不宜过短,太短则会导致客户端因心跳丢包而误判为掉线,进而触发客户端的重登机制。原则 上设置的长一点更有保证,但设置过长的话会导致服务端判定用户真正的非正常退出过于晚了,带 给用户的体验就是明明好友非正常退出了,过了好长时间才能感知到他已退出。
[补充关于会话超时时间值的设定技巧]:
以客户端的心跳间隔是3秒为例,10秒内如果客户端连丢2个包,通常情况是能保住它的UDP连接的,
但如果设为6秒超时,那么在网络超烂时会导致客户端被判定掉线的几率升高,因为6秒超时下,丢
1个包就有可能被判定掉线了,而网络超烂的情况下丢一个包的可能性普通的很高,也就使得掉线变
的频繁而影响用户体验!
请在 #startup()
方法被调用前被设置,否则将不起效.
protected final io.netty.channel.EventLoopGroup __bossGroup4Netty
作为全局变量的目的,当前仅用于关闭服务器时来释放此连接池对应的资源,别无它用。
#startup()
protected final io.netty.channel.EventLoopGroup __workerGroup4Netty
作为全局变量的目的,当前仅用于关闭服务器时来释放此连接池对应的资源,别无它用。
net.x52im.mobileimsdk.server#startup()
protected io.netty.channel.Channel __serverChannel4Netty
作为全局变量的目的,当前仅用于关闭服务器时来释放此Channel对应的资源,别无它用。
net.x52im.mobileimsdk.server#shutdown()
protected io.netty.bootstrap.ServerBootstrap bootstrap
public void init(ServerCoreHandler serverCoreHandler)
因本框架中为了应用层编码的易用性,赋予了Netty中UDP的“会话”(或说“连接”) 的能力,因而本方法中使用了跟TCP一样的ServerBootstrap而非Bootstrap。 有关Bootstrap的官方API说明,请见:http://docs.52im.net/extend/docs/api/netty4_1/io/netty/bootstrap/Bootstrap.html
public void bind() throws java.lang.Exception
Gateway
protected io.netty.channel.ChannelHandler initChildChannelHandler(ServerCoreHandler serverCoreHandler)
如有需要,子类可以重写此类实现自已的Inbound Hander链接逻辑。
MBUDPClientInboundHandler
,
io.netty.handler.timeout.ReadTimeoutHandler.ReadTimeoutHandler
,
io.netty.channel.ChannelInitializer.ChannelInitializer