Java Netty游戏架构-JSTS内嵌

7 篇文章 0 订阅
7 篇文章 0 订阅

基于上篇介绍的命令通讯思路,我在JSTS里编写了命令处理的相关组件。主要包含以下几个部分:

1. Socket/WebSocket组件

2. Message消息中间件

3. 通讯事件处理组件

下面我将通过介绍jsts中的测试代码,来讲相关思路和用法。

应用的程序入口类:JstsApplication

	public static void main( String[] args ) {
		SpringApplication.run(JstsApplication.class, args);

		CommonContextHolder.getBean( IServerService.class ).onload();
	}

作为服务器使用时,我们需要先实现IServerService中的相关方法,jsts中提供了AbsServerService的抽象类,主要包含onload、unload、reload这3个方法。可以理解为加载、卸载、重载的函数入口。

在AbsServerSerivce中的主要代码:

        if(CommonConfig.getBoolean( Netty_Socket_Enable, true ) ){
            CommonContextHolder.getBean( ISupportSocket.class ).onload();
            log.debug( "--服务器支持[Socket]已加载." );
        }
        if(CommonConfig.getBoolean( Netty_WebSocket_Enable, true ) ) {
            CommonContextHolder.getBean(ISupportWebSocket.class).onload();
            log.debug("--服务器支持[WebSocket]已加载.");
        }
        if(CommonConfig.getBoolean( Netty_Connector_Enable, true ) ) {
            CommonContextHolder.getBean(IConnectorService.class).onload();
            log.debug("--服务器支持[连接器]已加载.");
        }

在《Netty实战手册》中,我介绍了jsts将Netty的服务器通讯结构封装为了以下几个部分:

        /**
	 * 客户端事件处理器
	 * @return
	 */
	@Bean
	public ISupportHandler<ChannelHandlerContext, Object > supportHandler(){
		return new AbsHandlerService<ChannelHandlerContext, Object>() {
			@SuppressWarnings( "unchecked" )
			@Override
			/** 收到客户端消息 **/
			public void receive(ChannelHandlerContext _ctx, Object _obj) {
				CommonContextHolder.getBean( IRequestHandler.class ).request( _ctx, _obj );
			}

			@Override
			/** 客户端连接 **/
			public void enter(ChannelHandlerContext _ctx) {}

			@Override
			/** 客户端断开 **/
			public void leave(ChannelHandlerContext _ctx) {}

			@Override
			/** 客户端中断 **/
			public void standby(ChannelHandlerContext _ctx) {}

			@Override
			/** 客户端恢复连接 **/
			public void recovery(ChannelHandlerContext _ctx) {}

			@Override
			/** 客户端连接异常 **/
			public void error(ChannelHandlerContext _ctx, Throwable _thr) {}
		};
	}

在收到消息时,会通过IRequestHandler进行转发,通过消息中间件找到对应的命令,并执行,这个过程通过反射完成。可以参考上篇或者jsts源码。

命令事件处理类:JstsModel

    @MessageLabel( "测试命令" )
    public static final int   CMD_TEST        = 100;

    @Autowired
    ISupportHandler         handler;
    @SuppressWarnings( "unchecked" )
    @MessageRequest( CMD_TEST )
    public void request0( ChannelHandlerContext _ctx, Message _msg ){
        System.out.println( "--request0" );

        handler.send( _ctx, _msg );
    }

    @MessageResponse( CMD_TEST )
    public void response0( ChannelHandlerContext _ctx, Message _msg ){
        System.out.println( "--response0" );
    }

服务器间的通讯或者客户端和服务器的通讯,实现方式和上述基本一致,实现类和接口不同而已。

另外Message类,通过定义消息的结构体,由protostuff来完成消息内容的相关转换。详细内容见MessageDecoder类。(注:这里其实想把MessageDecoder分为decode和encode 这2个部分的,后续版本可能会调整)

对于需要数据处理的同学,则通过导入jdbs部分,在JstsModel类中加入2个部分即可实现:

    @Autowired
    AbsDao          dao; //建议继承BaseDao使用,而不是直接继承AbsDao
    @Transactional
    @MessageResponse( CMD_TEST )
    public void request0( ChannelHandlerContext _ctx, Message _msg ){}

完整的代码实例,请前往以下地址:

https://github.com/aiyoyoyo/jeesupport

喜欢的朋友请给赞,并继续支持一下。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Netty-WebSocket-Spring-Boot-Starter是一个用于将Websocket集成到Spring Boot应用程序中的库。它使用Netty作为底层框架,提供了一种快速和可靠的方式来处理异步通信。 这个库提供了一种简单的方法来创建Websocket端点,只需要使用注释和POJO类即可。在这些端点上可以添加动态的事件处理程序,以处理连接、断开连接和消息事件等。 此外,Netty-WebSocket-Spring-Boot-Starter还包括了一些安全性的特性,如基于令牌的授权和XSS保护,可以帮助您保持您的Websocket应用程序安全。 总的来说,Netty-WebSocket-Spring-Boot-Starter提供了一种快速和易于使用的方式来构建Websocket应用程序,使得它成为应用程序开发人员的有用工具。 ### 回答2: netty-websocket-spring-boot-starter 是一个开源的 Java Web 开发工具包,主要基于 Netty 框架实现了 WebSocket 协议的支持,同时集成了 Spring Boot 框架,使得开发者可以更加方便地搭建 WebSocket 服务器。 该工具包提供了 WebSocketServer 配置类,通过在 Spring Boot 的启动配置类中调用 WebSocketServer 配置类,即可启动 WebSocket 服务器。同时,该工具包还提供了多种配置参数,如端口号、URI 路径、SSL 配置、认证配置等等,可以根据业务需求进行自定义配置。 此外,该工具包还提供了一些可扩展的接口和抽象类,如 WebSocketHandler、ChannelHandlerAdapter 等,可以通过继承和实现这些接口和抽象类来实现业务逻辑的处理和拓展。 总的来说,netty-websocket-spring-boot-starter 提供了一个高效、简单、易用的 WebSocket 服务器开发框架,可以减少开发者的开发成本和工作量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值