关于尝试做一个棋牌类型服务器的一些问题。。

shanda0301

打算用这个尝试做一个简单的交互APP服务器。
前提:
1、一个慵懒的c++ win平台 服务器程序员 - -。
2、在做一个APP游戏的服务器,想尝试一下用workerman去做
3、之前用这个做过一次,但是当时的需求过于简单,所有的请求都针对个人用户,逻辑上不牵扯到多个用户之间的数据运算。
4、花了1个星期,手册阅读完毕,其它用户的提问也翻来翻去看了好多。

感觉所有的准备工作完事后,有些问题搞不清楚。

就应用来说需求简单说是一个棋牌游戏服务器,大家开一桌游戏,然后一起打牌什么的。
聊天什么的也就是基本功能了,不说。
本来基本的一起打牌什么的逻辑也是蛮简单的,以之前的做法来说,用户连上来建个房间给管理一下,发一副牌大家消息通讯玩一玩就完了。

但是我被workerman的多进程这玩意儿给搞晕了,写了测试代码看到worker是多个进程的,用户连上后是不一定在哪个进程上的,那这一副牌怎么让在不同进程上的用户一起玩呢?启动单个worker,多个gate?那在单个进程worker撑不住的时候如何做扩展呢?
从某个别人的问题中看到redis扩展,不知道我理解的对不对,难道是把redis看作是全局内存,然后多个进程看作是从前的线程,这么看?。。。
是不是我哪点知识缺了,哪里理解错了。。。
第一次自己尝试做一个服务器,麻烦帮忙给点思路,或者说教育一下一个提供给群体的棋牌服务器应该是一个什么样的构架,能实现进程扩充来支持用户增长,那就更感激不尽了。>_<

7742 4 0
4个回答

walkor

感谢你这么详尽的问题描述。

这个问题比较好解决,启动多个进程的worker,
由于是单进程(一个端口开一个进程),客户端通过同一端口连接到的肯定是同一个进程,这样单个进程内各个客户端通讯非常方便。棋牌类游戏,只要一个房间的几个用户通讯即可。

每个worker进程可以作为一个区,每个区多个房间(用进程内的数组来存储房间数据)。棋牌类游戏通讯量非常小,单个进程能够支持上万人在线了。开多个端口实例,就等于开多个区,那么就能支持更高的在线用户数。开更多的服务器,每个服务器上开多个端口实例,这样可以几乎无限制扩展。

你的情况非常类似下面这个问题,可以看下
http://wenda.workerman.net/?/question/523

  • shanda0301 2015-11-04

    ...谢谢,瞬间开阔了,果然是我自己晕了 - -

aguai

如果是这样的话,使用socket.io是不是更简单了?房间这一套就不用自己实现了?

  • 暂无评论
walkor

各有优点。如果phpsocketio满足需求可以直接用。不满足要求时worker man量身定制更方便些 性能也会高一些

  • 暂无评论
shanda0301

网游服务器进化史:早起选c++,原因运行速度快!现如今,c++的缺点开发成本大,难度高,速度慢。而运算速度的优势面对现在的手机平台需求更是不值一提。
于是考虑尝试一下其它语言写服务器。
然后有一次工作的原因尝试过写PHP代码,后来从不同的框架、引擎,找到了workerman,并且尝试着写了一个http应用服务。
于是,一个c++网络游戏服务器程序员的PHP服务器之旅这样一条不归路起飞了 >_<
就不要指望我还知道些什么socket.io……thinkphp……php语言学问……
现如今我就是一个懂得一些服务器架构的小码农而已……………………

  • jelty 2015-11-06

    看看wm源码就好了 挺简洁规范的 , 我就是对多进程,及通讯的概念搞不清, 底子不好啊 ...我要懂c++就好了

年代过于久远,无法发表回答
🔝