从零开始实现放置游戏(十)——实现战斗挂机(1)hessian服务端搭建

简介:  前面实现RMS系统时,我们让其直接访问底层数据库。后面我们在idlewow-game模块实现游戏逻辑时,将不再直接访问底层数据,而是通过hessian服务暴露接口给表现层。  本章,我们先把hessian服务搭好,并做一个简单的测试,这里以用户注册接口为例。  先简单介绍下,实现hessian接口,只需要在facade模块暴露接口,然后在core模块实现接口,最后在hessain模块配置好接口路由,将其启动即可。

 前面实现RMS系统时,我们让其直接访问底层数据库。后面我们在idlewow-game模块实现游戏逻辑时,将不再直接访问底层数据,而是通过hessian服务暴露接口给表现层。


  本章,我们先把hessian服务搭好,并做一个简单的测试,这里以用户注册接口为例。


  先简单介绍下,实现hessian接口,只需要在facade模块暴露接口,然后在core模块实现接口,最后在hessain模块配置好接口路由,将其启动即可。


实现步骤


idlewow-facade


  新建包com.idlewow.user.model,在此包下添加模型类:


UserAccount.java


新建包com.idlewow.user.service,在此包下添加接口类:


UserService.java


idlewow-core


    新建包com.idlewow.user.mapper,添加mapper文件:


 UserAccountMapper.java


UserAccountMapper.xml


新建com.idlewow.user.manager包,添加manager类:


 UserAccountManager.java


新建com.idlewow.user.service.impl包,添加接口的实现类:


 UserServiceImpl.java


 注意,这里ServiceImple类上面有个注解 @Service("userService")。后面我们再添加这种对外的服务类时,都要加这个注解。


idlewow-hessian


  hessian用于服务(器)间通信,实际上也是由一个DispatherServlet接收请求,并转发到各个Service中处理,和springmvc差不多,只不过返回的是二进制数据,而不是视图。我们在pom下添加下列依赖,可以发现依赖的包和mvc差不多。另外,作为启动项目,在plugins节点下,我们配置了启动插件tomcat7以及启动端口20000。


pom.xml


 然后,我们需要在web.xml中配置hessian的servlet,以及添加一个字符编码的filter等等,如下:


web.xml


在/resource/spring目录下,新建hessian服务的配置文件hessian-servlet.xml。这个xml主要配置对外暴露的hessian服务。现在我们只配置了UserService,后面每次添加对外的服务接口时,都需要在这里添加配置。


hessian-servlet.xml


 除了这3个配置外,还需要配置applicationContext.xml, jdbc.propetries, dataSource.xml, log4j2.xml,和RMS系统大体一致,这里就不再重复了。具体可在源码中查看。


  全部搞定后,只要把hessian项目启动,即可调用hessian接口了。启动步骤和rms一样,maven命令也是tomcat7:run,工作目录切换到hessian目录下即可。


运行效果


  在game模块中调用hessian时,也是通过在xml中配置注入的方式调用。这里我们还没开始写game模块,为了测试,先简单写一个入口类(即带main函数的类)调用。类似于C#中写控制台程序调用。


  在/src/test/java包下新建一个类HessianTest.java如下:


 HessianTest.java


 在这个类中,我们指定hessian服务地址,并利用代理工厂创建一个服务代理。然后调用用户注册方法。测试的时候,先把hessian项目启动。然后执行这个main方法即可。

运行效果如下图,可以看到,接口调用成功,并把执行结果在日志中打印了出来。


微信图片_20220423211536.gif


小结


  本节把hessian服务搭建运行起来,并实现了用户注册登录的接口。后面game模块凡是访问底层数据,均需调用hessian服务。

相关文章
|
7月前
|
消息中间件 小程序 网络性能优化
蓝易云 - 直播小程序源码有用的协议知识:MQTT协
在直播小程序源码中,MQTT协议可以用于实现实时消息推送,如弹幕、聊天消息、礼物信息等。通过使用MQTT协议,可以确保消息的实时性和可靠性,从而提高用户体验。
195 0
|
7月前
|
安全 Java Go
springboot+netty化身Udp服务端,go化身客户端模拟设备实现指令联动
springboot+netty化身Udp服务端,go化身客户端模拟设备实现指令联动
163 0
|
测试技术 Go
【测试平台系列】第一章 手撸压力机(五)- 结构化http请求配置
我们现在将上一级称之为TestObject(测试对象),现在我们梳理一下TO(测试对象简称,以后的文章中TO都代表测试对象)都需要哪些字段。
|
测试技术 Go
【测试平台系列】第一章手撸压力机(二)自定义http客户端配置
上一节简单实现了http发送get请求的客户端,但是在实际工作中,我们会对客户端有各种的设置,也会有各种的请求。
【测试平台系列】第一章手撸压力机(二)自定义http客户端配置
|
测试技术
【测试平台系列】第一章 手撸压力机(九)- 封装函数
将我们的一些代码封装到函数和方法中,这样我们看来代码可读性更好。如果发现bug,也可以更好的进行追踪。
|
测试技术
【测试平台系列】第一章手撸压力机(三)自定义http请求
今天继续深入往下讲,上一篇咱们对http的客户端设置进行了结构化统一,现在咱们开始对http请求进行结构化统一,首先咱们梳理http请求包含的结构。
|
测试技术
clswindow使用案例:控制电脑版微信发送消息(含源码)
clswindow使用案例:控制电脑版微信发送消息(含源码)
276 0
clswindow使用案例:控制电脑版微信发送消息(含源码)
|
消息中间件 Ubuntu Java
Docker下RabbitMQ延时队列实战两部曲之二:细说开发
在SpringBoot框架下进行RabbitMQ开发,并且在Docker环境部署和运行
134 0
Docker下RabbitMQ延时队列实战两部曲之二:细说开发
|
缓存 前端开发 JavaScript
从零开始实现放置游戏(十三)——实现战斗挂机(4)添加websocket组件
前两张,我们已经实现了登陆界面和游戏的主界面。不过游戏主界面的数据都是在前端写死的文本,本章我们给game模块添加websocket组件,实现前后端通信,这样,前端的数据就可以从后端动态获取到了。
从零开始实现放置游戏(十三)——实现战斗挂机(4)添加websocket组件
|
缓存 运维 前端开发
从零开始实现放置游戏(十四)——实现战斗挂机(5)地图移动和聊天
上一节添加了websocket组件,实现了前后端通信。后面我们只需要根据游戏的业务逻辑,逐步实现各种功能即可。   另外,在实现具体业务逻辑时,发现上一章设计的消息对象有些不合理,由于粒度过粗,导致可以复用的部分很少,且这里的通信模型并不是一个请求对应一个响应的模式。比如:玩家a从地图A移动到地图B。此时,a发送移动请求。服务器返回B地图的信息和在线列表给A。同时还要发送最新的在线列表给地图B的其他玩家b,c,d....这里其他玩家并没有发送请求,但收到了响应消息。因此,将消息类型重构成由客户端发出的消息和由服务端发出的消息两类,分别以"3000"和"6000"开头。
从零开始实现放置游戏(十四)——实现战斗挂机(5)地图移动和聊天