前几天说了一个邮局模式的结构,但是后来看来不靠谱,erlang的思想和现在大部分主流语言的解决并发的想法都是不同的,因为许多概念上的东西都不同,这几天把java的东西捡了捡看了看基础的书,发现这种模式不合理,如果对于游戏来讲的话我又把自己的结构更改了一下!
1.利用两个环队列来处理消息的收发问题(每个进程一个收发队列),每次我们的线程就去环里面拿消息(这里要加锁,打个比方当1号线程拿队列里指针的第一个位置的消息,那么1号消息加锁,然后指针下移保证每条消息一次执行,执行以后将一号消息删除),这个环的大小要定义的合理,看根据我们的消息吞吐量来决定,那么如果出现消息溢出我们直接把前面的消息顶掉,后面的消息进入(这里还没有想好,因为如果合理定义那么应该不会出现溢出的情况,处理速度当然是和线程数成正比的,线程越多,那么处理速度越快,但是占用内存就更多,这是简单换时间的概念)!
2.数据库的话,可以随意,表的定义完全根据自己的需求!(其实我有想过,把所有的数值处理全部交给数据库完成,毕竟数据库也可以缓存到内存中,但是貌似没听过谁这么做过,这样耦合性比较强,不容易把握)!
3.设立一个消息转发进程,这个进程的作用是,监听接收发送tcpip连接信息,将发来的消息进行一个分类处理分发的下属进程中去,例如消息flag为人物间消息那么我们就将他发给人物进程(我一直在想能不能tcp连接和消息的处理写在一个进程里,毕竟减少进程间通信可以提高响应速度,不过连接的操作以及消息的分发,和消息的处理都写在一个进程中结构很不清晰,而且这里只是两次进程间通信的收与发,所以貌似影响应该不大)!(java里的进程间通信,就是类似于erlang中的跨节点通信!)
4.关于tcpip的连接数问题,如果我说我一个tcpip协议只开启两个socket连接,可能会感到很诧异,我们以前的erlang处理是,一个人物一个socket,但是我感觉没有必要,因为发包的数量是不变的,发来1000个包,不会因为连接的增加而加快,主要看的是网速,一个长链接就可以了(首先,你一定会问,这样做的玩家的独立性怎么解决,其实,玩家也好怪物也好,在我们的内存中,只不过就是数据,就算是每个人给他一个连接,那么他们做的事情也都是处理映射数据,然后持久化到数据库中,那么我们现在用一个集中处理的方式来处理每个人的动作也未尝不可,因为java的线程可不想erlang中的进程那样随意创建!当然,到目前为止我没有真正开发过java的游戏项目,至于如何解决高并发问题,也是我根据自己的理解来处理)。
5.用一个java进程来作为主进程既人物进程,数据库的人物信息映射到hashmap里,开启100~200个线程随意(前期可以先在我这个8g小电脑上开10个线程实验一下,毕竟是想法,还没有做好)!我们每个线程主动去队列里拿消息,一旦遇到消息为零那么我们的线程进入就绪(runnable)状态!
6.相应的,我们可以把人物关系和怪物以及聊天等大功能拿出来,单做一个进程,这样做可以尽可能的减少进程之间的通信,而且层次比较清晰,如果我们在一个进程处理如此庞大的信息量,会很难,很复杂!
7.关于消息的定制,我们用的是protobuffers一个开源的消息协议,当然我们也可以自己写一套,我感觉应该不会那么难!
以上也是最近思考过的较为靠谱的一些结构,毕竟细节上的处理还是要边做边看,就像日志的写操作,和一些资源强制释放等问题,还有服务器的内存中的数据何时写入数据库都是值得深思的!现在光是空想恐怕想不明白,还是做了以后跑几个小机器人试试再说吧
相关推荐
Java基于命令模式实现邮局发信功能详解 命令模式是 Java 中的一种设计模式,它将来自客户端的请求封装成一个对象,无须了解这个请求激活的动作或有关接受这个请求的处理细节。命令模式的根本目的在于将"请求者"与...
材料一:昆明市邮政局营销模式转变及营销体系建设的进一步完善和提升.doc
Direct模式是最简单的模式,类似于邮局的信件分发。消息发送者(Producer)定义一个路由键(Routing Key),接收者(Consumer)定义一组绑定键(Binding Key)。当路由键与绑定键完全匹配时,消息会被传递到相应的...
内蒙古自治区邮政局投递员工满意度调查研究,李浩,武晓岛,目的 分析内蒙古邮政局投递员工满意度现状,可以为内蒙古自治区乃我国邮政的发展提供一些有益的帮助。方法 采用多阶段分层整群抽�
本系统是一个基于VB编写的简易邮局管理系统,虽然功能相对简单,但对于初学者来说,它是一个很好的实践项目,能够帮助理解基础的数据库操作和窗口应用程序的设计。 首先,我们来了解一下VB在创建管理系统的应用基础...
观察者模式通常的叫法叫做订阅-发布模式,类似于报刊杂志的订阅,观察者和被观察者就是读者和邮局的关系,读者先要在邮局订阅想要的报刊,当报刊发行时,邮局会将报刊邮寄到读者家里。观察者(Observer)和被观察者...
电子政务-挂号电子邮局及其传送模式.zip
邮局订报管理系统是基于JSP技术实现的一个典型Web应用案例,主要涵盖了Web开发中的前端展示、后端处理以及数据管理等核心环节。系统利用JSP(JavaServer Pages)作为视图层技术,Servlet作为控制层,JavaBean作为...
在互联网经济下,众包已经被运用于各行各业中,法國邮局的运营改革,IBM的内部管理改革,印度农产品市场的新模式,美国Snapt ee的T恤众包设计,美国赛利诺斯葡萄酒庄园的用户自定酿制过程,国内的乌云众测平台,赚...
邮政局三八妇女节慰问信.docx
邮政局文件控制程序.doc
邮政局工作思路计划.doc
2011年荆门市邮政局函件广告局.zip
2011年荆门市邮政局函件广告局.doc
邮政上班时间表,邮政局上班时间.doc
某县邮政局经营分析课件.pptx
邮政局各岗位职责说明.doc
邮政局支局管理制度汇编.doc
国家邮政局邮政业安全中心邮政业消费者申诉系统优化升级项目相关招标文件,为相关项目招投标文档编写提供参考!
邮局选址问题是一种经典的组合优化问题,它在物流、设施规划和网络设计等领域有广泛应用。这个问题的基本假设是:有一系列的潜在邮局位置,每个位置都有一定的服务成本,目标是找到最少数量的邮局,使得所有居民点都...