nodejs 打造 多人对战游戏服务器(初级入门)

使用socket.set 和 socket.get 在存取玩家信息

百牛信息技术bainiu.ltd整理发布于博客园

socket.get(‘playerinfo‘, function (err, player) {
            if(player == null) {
                console.log("[new player]",data.name);
                var player = new Player(socket, data);
            }
            else
            {
                 console.log("[wait player visit again]",data.name);
                socket.emit(‘error‘, "you have registered");
                return ;
            }
            socket.set(‘playerinfo‘, player, function () {
            usersWS.push(player);
            console.log("[wait player numer]",usersWS.length);
//这在里如果玩家状态和数量满足要求就可以开始游戏了
              Physic.CreatePhysicWorld(p1, p2);
//通知client 启动 游戏
         …………..
         }); //set
    }); //get
})    //socket.on

转发 和处理 玩家的输入

 socket.on(‘sync‘, function (data) {
    socket.get(‘playerinfo‘, function (err, player) {
            if(player != null) {
                //var target = usersWS[i].socket;
                var room = player.room;
                for(var i=0;i<room.players.length;i++)
                {
                       if(room.players[i].id ==player.id)
                        {
                        //console.log("this is msg from id:",room.players[i].id)
                        }
                        else
                        {
                        room.players[i].socket.emit(‘sync‘, data);
                        //console.log("send to id:",room.players[i].id)
                        }
                        //room.players[i].socket.emit(‘sync‘, data);
                }
            }//if
           else
           {
            socket.emit(‘error‘,"no session");
           }
        }); //get
    }); //socket.on

}); //Network.on

定义一个简单的玩家对象

function Player(socket, data)
{
var newplayer = {
    socket: socket,
    id: player_next_id++,
    tankType: 0,
    name: data.name,
    isMain: data.isMain,
    ip: socket.remoteAddress,
    status: ‘未准备‘,

// isAI: false, room: null }; newplayer.proto = Player.prototype; return newplayer; }

定义一个游戏房间对象

function Room(title)
{
var newroom = {
    id: room_next_id++,
    is_in_game: false,            // 判断改房间的游戏是否已经开始
    players: [],
    map: 0,
    title: title,
    game: null
};
room_list.push(newroom);
newroom.__proto__ = Room.prototype;
return newroom;

}

最后感言: 本人是新手,发篇文章互动一下实属不易。不周之处,还望高手轻点儿拍砖。

时间: 2024-10-17 16:06:25

nodejs 打造 多人对战游戏服务器(初级入门)的相关文章

H5十人牛牛架设游戏服务器架构: 内核设计

H5十人牛牛架设游戏服务器查看(aqiulian.com),内核设计分析Q_212303635:接下来讲解一下内核模块分析.内核的几个组件被设计成Service,也就是说这几个模块都要实现如下接口: 图1  IService接口 Start方法用来启动服务. Stop 方法用来关闭服务. IsService 方法用于查询当前服务是否正在工作. 内核中的几个Service都不能够直接创建,Applications在使用这些Service的时候首先要得到一个IServiceMgr的实例,这被实现成了

多人对战游戏观察者模式分析

一.观察者模式 观察者模式是使用频率最高的设计模式之一,它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应.在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展. 观察者模式定义如下: 观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对

二人对战游戏 结构体+函数

class 对战713 { struct Player { public string Name; public int Blood; public int Attact; public int Defence; public int DuoBi; public ArrayList JiNeng; public ArrayList ShangHai; } static void Main (string[] args) { #region 定义技能库 string[] JN; int[] SH;

nodejs开发游戏服务器遇到的性能问题

问题描述: 使用nodejs开发了一个游戏服务器,为了尽可能提高服务器的性能,服务器采用多进程的架构,前面处理玩家socket连接的是多个nodejs进程,使用 child_process 模块,服务器启动时fork出来,而处理玩家游戏逻辑的是单独一个nodejs进程(因为玩家之间需要交互,而且玩家都是有状态的,所以无法分成多个进程)这个作为主进程:主进程与子进程之间使用使用child_process模块内建的通讯方式进行通讯: 现在服务器性能出现瓶颈,服务器同时在线去到1500人左右,CPU占

小游戏●两人对战

利用结构体编写的两人对战小游戏,代码及简要分析如下 1 public struct Fighter 2 { 3 public string name; 4 public int blood; 5 public int attack; 6 public int defense; 7 public int hit; 8 public int hide; 9 } 10 11 12 static void Main(string[] arge) 13 { 14 15 //定义一组对手 16 Fighte

大型多人在线游戏服务器架构设计

由于大型多人在线游戏服务器理论上需要支持无限多的玩家,所以对服务器端是一个非常大的考验.服务器必须是安全的,可维护性高的,可伸缩性高的,可负载均衡的,支持高并发请求的.面对这些需求,我们在设计服务器的时候就需要慎重考虑,特别是架构的设计,如果前期设计不好,最后面临的很可能是重构. 一款游戏服务器的架构都是慢慢从小变大的,不可能一下子就上来一个完善的服务器构架,目前流行的说法是游戏先上线,再扩展.所以说我们在做架构的时候,一定要把底层的基础组件做好,方便以后扩展,但是刚开始的时候留出一些接口,并不

FPS游戏服务器设计的问题 【转】

一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击游戏),你是要用TCP呢还是要用UDP,说明理由 . 二.学习 这是两篇网上找到的文章,写非常不错. 当时笔试的时候自己没想到这么全,但大概想法都是一致的,摘录下来再学习一下. 1.网络游戏程序员须知 UDP vs TCP 作者:[email protected] 首发链接:http://blog.csdn.net/rellikt/archive/2010/08/21/5829020.aspx 这篇教程让我们就

游戏服务器主程白皮书-3.1 运行稳定性

3.1 运行稳定性 服务器的运行稳定性的产品展现当然就是7*24小时,甚至更久的不间断运行的产品质量.通俗一点说,就是服务器在7*24小时运行时间内服务器不出现卡顿,不出现宕机. 对于C++来说,宕机的原因99.9%是因为内存问题,内存的直接操作是让C++程序员又爱又恨的东西.其他的可能还包括物理故障.除数为0.系统问题(虚拟机问题)等.而卡顿的原因主要体现在CPU的使用率上.服务器CPU使用率过高了会因为CPU性能瓶颈导致卡顿,这个问题比较直观,但是CPU使用率低了也有可能导致卡顿.现在我把宕

当我设计游戏服务器时,我在想些什么?(2)

半年前我参与了一个手游项目,第一次能够主导整个游戏的设计,这篇文章单说服务器的架构,客户端就不提了. 对于服务端,我想从之前的端游服务器改过来肯定是走不通的(详见:),因为手游的开发周期比端游短很多,上面那一套架构开发了5年不止,当然,期间推翻重做了很多次.而这个手游项目只有快则6个月,慢则10个月的时间. 既然决定不用端游的架构,一切从0开始,那么快速搭建起一个可用的服务器是我考虑的第一个原则,第二点就是我做为程序员的一点私心,尽量使用以前没有用过的技术,这样自己能够接触更广阔的世界. 首先当