从零开始实现放置游戏(十)——实现战斗挂机(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服务。

相关文章
|
Web App开发 安全 网络协议
Qt开发技术:QWebSocket客户端、服务端介绍与开发
Qt开发技术:QWebSocket客户端、服务端介绍与开发
Qt开发技术:QWebSocket客户端、服务端介绍与开发
|
10月前
|
测试技术 Go
【测试平台系列】第一章 手撸压力机(五)- 结构化http请求配置
我们现在将上一级称之为TestObject(测试对象),现在我们梳理一下TO(测试对象简称,以后的文章中TO都代表测试对象)都需要哪些字段。
|
11月前
|
测试技术 Go
【测试平台系列】第一章手撸压力机(二)自定义http客户端配置
上一节简单实现了http发送get请求的客户端,但是在实际工作中,我们会对客户端有各种的设置,也会有各种的请求。
【测试平台系列】第一章手撸压力机(二)自定义http客户端配置
|
网络协议 Linux API
C/C++服务器和客户端交互笔记
Socket通信三要素:通信的目的地址、使用的端口号(http 80 / smtp 25)、使用的传输协议(TCP、UDP)。
143 0
|
测试技术
clswindow使用案例:控制电脑版微信发送消息(含源码)
clswindow使用案例:控制电脑版微信发送消息(含源码)
253 0
clswindow使用案例:控制电脑版微信发送消息(含源码)
|
缓存 前端开发 JavaScript
从零开始实现放置游戏(十三)——实现战斗挂机(4)添加websocket组件
前两张,我们已经实现了登陆界面和游戏的主界面。不过游戏主界面的数据都是在前端写死的文本,本章我们给game模块添加websocket组件,实现前后端通信,这样,前端的数据就可以从后端动态获取到了。
从零开始实现放置游戏(十三)——实现战斗挂机(4)添加websocket组件
|
缓存 运维 前端开发
从零开始实现放置游戏(十四)——实现战斗挂机(5)地图移动和聊天
上一节添加了websocket组件,实现了前后端通信。后面我们只需要根据游戏的业务逻辑,逐步实现各种功能即可。   另外,在实现具体业务逻辑时,发现上一章设计的消息对象有些不合理,由于粒度过粗,导致可以复用的部分很少,且这里的通信模型并不是一个请求对应一个响应的模式。比如:玩家a从地图A移动到地图B。此时,a发送移动请求。服务器返回B地图的信息和在线列表给A。同时还要发送最新的在线列表给地图B的其他玩家b,c,d....这里其他玩家并没有发送请求,但收到了响应消息。因此,将消息类型重构成由客户端发出的消息和由服务端发出的消息两类,分别以"3000"和"6000"开头。
从零开始实现放置游戏(十四)——实现战斗挂机(5)地图移动和聊天
|
iOS开发
iOS网络编程之五——请求回执类NSURLResponse属性简介
iOS网络编程之五——请求回执类NSURLResponse属性简介
269 0
|
存储 弹性计算 缓存
直播代码是如何工作的,不同服务器之间的区别
简单来说直播的原理就是把主播录好的内容实时推送到服务器,再由服务器分发给各个用户进行观看。直播发展到如今,由PC端的网页版直播到如今的移动端直播,越来越多直播功能的APP上线,直播的服务器分为很多种类,那么不同的服务器之间有哪些差异呢?本文来为大家简单介绍一下。 服务器在网络中为其它客户机提供计算或者应用服务。服务器具有高速的CPU运算能力、长时间的可靠运行、强大的I/O外部数据吞吐能力以及更好的扩展性。
直播代码是如何工作的,不同服务器之间的区别