架构服务器(一)

在线版本的编辑:


--->工具类 去链接数据库 执行数据库的操作
 ————》检查数据库的数据  从数据库里拿东西

 

 把拿出的数据存入:这个类里面

总 的流程图:

 

Mvc的设计模式:游戏的模式 代码分成三部分:

 

MVC的具体含义是:model+view+control,即模型+视图+控制它们各自处理自己的任务:
(1)模型:模型持有所有的数据、状态和程序逻辑。模型独立于视图和控制器。
(2)视图:用来呈现模型。视图通常直接从模型中取得它需要显示的状态与数据。对于相同的信息可以有多个不同的显示形式或视图。
(3)控制器:位于视图和模型中间,负责接受用户的输入,将输入进行解析并反馈给模型,通常一个视图具有一个控制器。
MVC模式将它们分离以提高系统的灵活性和复用性,不使用MVC模式,用户界面设计往往将这些对象混在一起。MVC模式实现了模型和视图的分离,这带来了几个好处。
(1)一个模型提供不同的多个视图表现形式,也能够为一个模型创建新的视图而无须重写模型。一旦模型的数据发生变化,模型将通知有关的视图,每个视图相应地刷新自己。
(2)模型可复用。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。
(3)提高开发效率。在开发界面显示部分时,你仅仅需要考虑的是如何布局一个好的用户界面;开发模型时,你仅仅要考虑的是业务逻辑和数据维护,这样能使开发者专注于某一方面的开发,提高开发效率。

 

 一、一个控制台程序:

1.便于管理 添加文件夹:

2.添加一个类:

 

 

 先构建服务器:使用socket创建:

需要ip地址和端口号:

 

 

添加一个构造函数:实例化一个ip地址和端口号:

 

添加一个新方法,进行绑定:

 

 

启动服务器新方法:

 

 需要new一个socket:

 

绑定,
监听
接收(异步接收,会回调一个函数,所以一个新方法)

 

na

拿到接收客户端的:

 

再创建一个新类 接收所有客户端:

 

 

给一个构造函数:

 

 

 

 

 
会有很多客户端:用list管理一下:

 

 用Client实例化一个类:this代表本类,bace代表基类

 

 客户端链接

 

 当接收到服务器,下边开始监听客户端消息:
在client类里面 有一个新方法 :

 

 监听客户端传过来的消息:通过beginRecive()

 

 

接收的数据长度,防止数据没有,用try catch:

 


 


关闭单独一个新方法:

 

 

Server添加一个移除客户端的方法:

 

为了防止争抢用:

 

使用lock的好处,第一个有人用,第二个来了就排队,等第一个用完,第二个再用

 回到cLient:

 

 

上边是没有链接上的时候:

现在是接收到的时候:

 

需要把西消息解析:

 

需要把Message

 

 

开始监听:

 

 存入了值:

 

再去监听:

 

 

 

 

 

到这一步了;


先创建一个所有controll的父类,改成一个抽象类

 

请求不同,controll就步同:
把所有的请求都放一个里面去,创建在Tools文件夹里面:

创建成一个类库:

 总共两个请求

一个请求:使用那一个contrcoll

 

一个使用controll里面的什么方法:

 

实例化另一个解决方案:

 

错误的类库:父类里面添加一个虚函数:

发送的一段消息的长度:

requestCode找到类 
AchonCode找到类里对应的方法:



添加一个新的Controll管理类:

 

 

 存入一个字典,键 就是requestCode ,值就是basecotroll 

 

 

 构造函数:把东西初始化:

 

 

 接收到具体消息: 在server类里面  实例化出来:进行所有请求分发:

 

 

 把消息传入 

 

 ControllMangeeeer处理接收请求的方法:

 

 传入信息

 


None:就是没有发送数据 或者是错误的数据:

 

 

 先把错误的信息加入字典里面:
key是 recoustCode,值 是错误的Code:

 

 

 

 

 假设已经拿到  先实例化一个类出来:
从一个字典里面找:

 

 

 

 

 返回值是个bool值,就把这个值接收一下

如果找不到就什么也步用做,如果找到就

 

 知道只是一个字符串,怎么去调用这个方法,设计到的知识是反射:
反射:不打开这个类的情况下,我能获取到类里的所有东西:

 编译就是把高级语言转换为低级语言,
脚本语言:js loa...  不需要编译  
热更新:事实看见东西 你修改的东西随意看:

 

 找到对应类里的方法。所以反射:
ActionCode是枚举,把它转换为字符穿 

 

 在这个Controcoller里找到它的方法:
通过GETTYPE()这个方法 得到里面的方法:

 调用完以后反射一个信息:
需要命名空间:

 

有时候 方法是有参数的 
如果为null  就是没有找到这个 方法:

 

我们反射的是actionCode
所以方法名字 必须和它一样 

 

 如果没有就return
如果找到就返回值 

定义一个Object类型的数组

 

再传一个值 需要把具体的数据传入 冰放入这个里面来:

 



 

 

  传的时候 除了数据 还应该有服务器 客户端

 

 

 

 

如果有返回值  或者没有的情况

没有返回值:

 

有返回值 就的发送给客户端:
给这个方法,具体给客户端  返回 ruquerstCoder  数据

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



 

posted @ 2018-11-26 15:48  白纸菇凉  阅读(218)  评论(2编辑  收藏  举报