我现在对网游的服务端不是太了解。有两种模式,我不知道哪个正确。。请做过相关的提示。
以简单的棋牌游戏为例子,
1.接受到客户端进入游戏的数据后,服务端随机发牌,每张用ID标识。这些传给客户端显示,同时把数据记到自己的内存字典中,如链表,list之类的数据结构中。客户端出牌,传ID到服务端。服务端用游戏规则判断可行否,或者是给出输赢结果,最后再在客户端显示。
2.接受到客户端进入游戏的数据后,服务端随机发牌,每张用ID标识。这些传给客户端显示,同时把数据记数据库中,客户端出牌,传ID到服务端。服务端根据用户ID查数据库,把之前的数据查出来,再用游戏规则判断可行否,或者是给出输赢结果,最后再在客户端显示。
不知道这两个逻辑哪个正常。。。大家来讨论。如果你有把握,可以直接给我留言,佣金不会少。
我的豆豆不是很多。呵呵希望大家多发言。
有没有做过的类似的啊!请指教一下。。。
若说棋牌游戏,应该没多少经费往服务器投,所以大多使用第一种,就是吃内存,第二种对于高性能服务器比较好,不然很容易出异常,另外,棋牌游戏一般不会把具体游戏数据详细的记录下来,只会记录最终结果加以计算
第一种方法,对内存控制要求比较高,开发也比较复杂,除非有现在的后台可以套。你的判断输赢,在客户端?所有的出牌逻辑都要写到客户端么?只记录谁赢了?
查看一下mssql的I/o速度......
@辛思雨:
如果是小型项目写客户端可行,但是比较正式点的话,写客户端容易被恶意模拟数据,我的意思是所有行为都在内存中完成,不要把每一步都记录到数据库,不然数据量很大的,服务器的话可以拆分一下,主要的端口放一台机器当做主机,再弄些小型机用于平均内存计算,小型机只做运算,不做最终数据存储
@ERS: 感觉你说得很有道理,现在的主要性能瓶颈其实在硬盘,数据库对并发的处理比人工写内存安全快速有效的。关键是硬盘的吞吐量问题,所以我认为一般放到数据库中处理并共享这种方法是正确的,大不了多做硬盘阵列,你说呢,我想的是这样的,比如在做象棋的时候,其实每一步都可以写在内存中,因为他不需要做数据共享。但是我害怕的是这个量啊,内存能够用不?
都可以,如果只有一台服务器,第一种就够用了。
如果有多台服务器要进行数据同步,用第二种好一些。
呵呵,现在的网游,动不动就上万的并发量了,如果要存在内存中,那不是要自己写一些锁之类的东东。为了加速查找数据,也需要用特殊结构吧。我很想知道,C++用什么样的结构来满足要求。。。举一个例子呗。。。