netty服務端監聽客戶端連線加入和斷開事件
package com.ahies.stm.app.gatenetty;
import com.ahies.stm.app.centerControl.object.protocol.ControlProtocol;
import com.ahies.stm.app.centerControl.object.service.ControlObjectService;
import com.ahies.stm.app.synthesizes.appoint.service.AppointMemberService;
import com.ahies.stm.app.ticketsys.gatenetty.GatelProtocol;
import com.ahies.stm.app.util.HexUtil;
import com.ahies.stm.app.util.SpringContextUtil;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.channel.group.ChannelGroup;
import io.netty.channel.group.DefaultChannelGroup;
import io.netty.util.Attribute;
import io.netty.util.AttributeKey;
import io.netty.util.concurrent.GlobalEventExecutor;
import java.net.InetSocketAddress;
public class GateTcpServerHandler extends SimpleChannelInboundHandler<Object> {
public static ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
@Override
protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
// 用於獲取客戶端發來的資料資訊
GatelProtocol body = (GatelProtocol) msg;
System.out.println("接收到客戶端發來的訊息=="+msg.toString());
AppointMemberService appointMemberService = (AppointMemberService) SpringContextUtil.getBean(AppointMemberService.class);
appointMemberService.handleMsg(body,ctx);
}
/**
* 當有客戶端連線時,handlerAdded會執行,就把該客戶端的通道記錄下來,加入佇列
*連線第1步
* @param ctx
* @throws Exception
*/
@Override
public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
Channel inComing = ctx.channel();//獲得客戶端通道
//通知其他客戶端有新人進入
channels.add(inComing);//加入佇列
super.handlerAdded(ctx);
}
// 連線第2步
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
Channel inComing = ctx.channel();
AttributeKey<String> host_channel_key = AttributeKey.valueOf("channel-host");
Attribute<String> attr = inComing.attr(host_channel_key);
InetSocketAddress socketAddress = (InetSocketAddress) inComing.remoteAddress();
String host = socketAddress.getHostString();
attr.set(host);
System.out.println("[" + inComing.remoteAddress() + "]: 線上");
super.channelActive(ctx);
}
// 斷開連線 第1步
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
Channel inComing = ctx.channel();
System.out.println("[" + inComing.remoteAddress() + "]: 離線");
super.channelInactive(ctx);
}
/**
* 斷開連線 第2步
*
* @param ctx
* @throws Exception
*/
@Override
public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
Channel outComing = ctx.channel();//獲得客戶端通道
channels.remove(outComing);
super.handlerRemoved(ctx);
ctx.channel().close();
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
System.out.println("exceptionCaught!" + cause);
cause.printStackTrace();
channels.remove(ctx.channel());
ctx.close();
}
}
相關文章
- Netty入門系列(1) --使用Netty搭建服務端和客戶端Netty服務端客戶端
- java netty 實現 websocket 服務端和客戶端雙向通訊 實現心跳和斷線重連 完整示例JavaNettyWeb服務端客戶端
- 【LISTENER】Oracle分析連線監聽情況,判斷客戶端IP分佈Oracle客戶端
- TCP協議服務端和客戶端的連線與通訊TCP協議服務端客戶端
- 服務端渲染和客戶端渲染服務端客戶端
- 服務端,客戶端服務端客戶端
- 客戶端,服務端客戶端服務端
- python建立tcp服務端和客戶端PythonTCP服務端客戶端
- Java服務端和客戶端開發輔助工具UtilsJava服務端客戶端
- impala客戶端連線客戶端
- Qt TCP通訊客戶端斷開連線有哪些方法QTTCP客戶端
- MQTT伺服器搭建服務端和客戶端MQQT伺服器服務端客戶端
- 服務端c100k連線測試和客戶端65535測試驗證2服務端客戶端
- TCP程式設計之服務端和客戶端的開發TCP程式設計服務端客戶端
- Go基於gRPC實現客戶端連入服務端GoRPC客戶端服務端
- Java 客戶端 Jedis和JedisPool 連線池Java客戶端
- C#WebSocket服務端處理多客戶端連線C#Web服務端客戶端
- 使用Apollo Server搭建GraphQL的服務端和客戶端Server服務端客戶端
- Eureka高可用叢集服務端和客戶端配置服務端客戶端
- netty建立數萬客戶端連線,並主動發訊息Netty客戶端
- Redis客戶端連線數DevOpsRedis客戶端dev
- mysql、redis 客戶端連線池MySqlRedis客戶端
- OSSEC服務端配置客戶端批次部署方案服務端客戶端
- golang實現tcp客戶端服務端程式GolangTCP客戶端服務端
- netty系列之:使用netty搭建websocket客戶端NettyWeb客戶端
- 微服務整合Spring Cloud Alibaba Seata (二) 客戶端連線微服務SpringCloud客戶端
- macOS 自帶的ftp服務端&vnc客戶端MacFTP服務端VNC客戶端
- rsync備份【基於客戶端與服務端】客戶端服務端
- 埃森哲:端到端客戶服務報告
- HTML轉PDF的純客戶端和純服務端實現方案HTML客戶端服務端
- 對比分析--淺析SSR(服務端渲染)和SPA(客戶端渲染)服務端客戶端
- 服務端和客戶端 RESTful 介面上傳 Excel 的 Python 程式碼服務端客戶端RESTExcelPython
- 檔案下載之斷點續傳(客戶端與服務端的實現)斷點客戶端服務端
- 0039-如何使用PythonImpyla客戶端連線Hive和ImpalaPython客戶端Hive
- 服務端如何獲取客戶端請求IP地址服務端客戶端
- 實現客戶端與服務端的HTTP通訊客戶端服務端HTTP
- MQTT協議從服務端到客戶端詳解MQQT協議服務端客戶端
- Netty事件監聽和處理(上)【有福利】Netty事件