QQ斗地主项目简介

整体采用C/S架构,即服务器端/客户端!目前关系1对多关系,如果将来并发量大可能服务器会多些,但相对于客户端的数量来说服务端的数量还是微不足道的!
目前项目通信机制采用原生Socket通信机制!其实无论是b/s还是c/s底层的处理机制都一样,客户端在自己电脑进行请求操作比如输入网址然后回车或者qq输入账号密码点击登录按钮,这些动作其实都是在向随时提供服务的服务器发送请求,而我们希望服务器返回我们所需的东西!这期间的流程是:客服端发送请求数据,服务器端收到请求数据然后根据定制好的规则对请求数据进行处理然后返回符合规则的响应信息给客户端,客户端收到响应数据就是期望得到的东西!
其实目前qq斗地主也实现自己的斗地主协议,就像http1.1协议一样,只是没有成文的文档。这个协议其实就是
com.ansatsing.landlords.protocol这个包下的类,每个类就代表一种客户端请求动作,比如输入网名登陆就是GameRegisterProt这个协议类、点击空位入座就是EnterSeatProt这个协议类、点击请准备就是GameReadyProt这个协议..等等!每个协议类在客户端和服务端都自己的同包名同类名的类,但在两的成员方法却不一样就是协议的处理方式不一样!比如点击空位入座这个协议类, 在客户端流程就是在点击空位的同时就new一个EnterSeatProt协议类,协议类里有个成员方法就是sendMsg();这方法就是发送这个协议类信息到服务器端,服务器端收到这个协议类构成的信息后就反射成EnterSeatProt协议类,这个类在服务器端有自己的成员方法就是消息处理机制handleProt()这个方法,这个方法的逻辑就是把入座的信息告诉游戏厅里所有其他客户端这个位置有人入座并且空位的文字变成用户名以标示此位置有人!这里面用到反射技术还有json技术,协议类采用策略设计模式,总的目的是为了去掉if else构成的庞大代码,还有就是方便以后扩展协议,比如增加一个踢人功能,那我就无需在服务端和客户端消息处理线程类加任何有关踢人的代码!只需在protocol包下增加一个踢人的协议类,然后在窗体里加上响应踢人按钮事件!


目前用到的技术:原生socket、多线程、反射、json【阿里的fastjson】,swing、集合

算法以后再说。。。

posted on 2017-11-13 23:29  安清  阅读(547)  评论(0)    收藏  举报