socket.io 游戏开发
发布于 6 年前 作者 miyes 3669 次浏览 最后一次编辑是 5 年前 来自 问答

作为node.js及游戏服务器开发的新手,最近工作中碰到了一些问题及一些思考,在此向前辈们请教。 1.多客户端与服务器建立的socket连接在服务器上怎么存储才合理?因为某些场景下服务器需要主动给客户端发送数据,例如两个玩家聊天,看了原来同事写的代码使用的是一个全局的map来建立映射{userId:socket},但是这两天就出现了一个问题,当客户端发送一个别人的userId给服务器,服务器就找到了别人的socket然后执行了一些操作。主要想要解决的应用场景就是服务器主动给某一些客户端发送消息,聊天的私聊。 2.有关rpc调用虽然找了一些资料了解了一些,不过总觉得有些模糊,希望哪位前辈写一个实际的例子来解惑。 3.游戏服务器一般都设计成数据与逻辑分开,一般都是在不同的机器上,那怎么解决当数据量及在线人数比较大时机器间来回传输带来的性能瓶颈?

有相关现有资料恳请给个链接

5 回复

1、“客户端发送一个别人的userId给服务器”,为什么没做异常检测,要检查收到此消息的socketid和要操作的userId所映射到socketid是否同一条 2、你可以看看Dnode库的readme 3、游戏为了避免同一服务人数过多都是采用分服的机制 你们游戏服务器多少并发?我以前开发的游戏同时在线10W+也没遇到这样的问题

@jxwht005 1.这个问题出现在断线重连,我看了以前同事写的代码,当断线后服务器会立刻把对应玩家设置为离线状态,重连的实现就是依靠客户端发送的userId找到玩家数据并把它设置为在线状态,然后应该是重新建立socket连接,所以就导致了重连之后各种问题。 3.我的意思是比如A机器上是数据,B机器上是逻辑,那么当B上的逻辑运行是就需要从A去拿数据,处理完逻辑之后又需要把数据返回给A,当数据量很大时肯定会有延迟从而影响性能。

1、在断开时清理掉{userId:socket}中的socket,然后在重新建立时,用新的socket和userId建立新的MAP 3、 1)精简数据传输量 2)增加带宽

看下pomelo框架也许会哟收获

@suntopo 功力太浅,pomelo还看得不是很懂

回到顶部