注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

分享,态度 ·~~

—— 十年太长,五年;如果可以回到五年前,你最想对那时候的自己说什么?

 
 
 

日志

 
 

利用Windows Azure构建联网游戏(Social Game)  

2011-11-07 15:20:27|  分类: Windows 8 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

背景

1.       构建一个丰富的生态系统;(Windows8mobile、网页)

2.       不限定于特定的设备;

3.       在目标设备上有最好的体验:

Windows8上的高分辨率;

Mobile上自动缩放到适合的大小。

 

联网游戏(网络游戏?SocialGame)的特征

1.       身份验证;

2.       用户设定;

3.       状态存储;

4.       实时通讯;

5.       游戏服务:比如,排行榜、成就表。

 

SocialGame的生态系统很庞大。现在的游戏不仅仅局限于单只设备上,运行在Windows8上的游戏,另一个User可能期望在iOS上玩。AndroidWindowsPhone7Explorer甚至FaceBook都是SocialGame的运行平台。

利用Windows Azure构建联网游戏(Social Game) - 乂乂 - 一个人,一支烟  ·~~

  

举了一个例子介绍SocialGame(视频时间04:01

Tankster:一个HTML5游戏。http://www.tankster.net/

 

SocialGame的架构

Tandster有三个版本:Windows8 Metro AppWindowsPhone7IE10 (HTML5)

利用Windows Azure构建联网游戏(Social Game) - 乂乂 - 一个人,一支烟  ·~~

 

Tankster的游戏流程介绍。

开始Tankster游戏:

1、  Windows8版本Tankster开始游戏,发送CommandGameServer端;

2、  同时,TanksterWindowsAzure的存储部分(Blob Storage)做数据同步;

3、  GameServer端将Command放到队列(Queue);

4、  Worker获取Queue中的Command,读取信息;

5、  Worker存储信息到Windows Azure Storage

有两个好处:

可扩展,你不需要担心会有多少客户端(Client)在运行,信息隐藏在Cloud端;

方便的,这些游戏状态存储和配置由Windows Azure完成。

利用Windows Azure构建联网游戏(Social Game) - 乂乂 - 一个人,一支烟  ·~~

  

邀请其他PlayerWindowsPhone)参与:

1、  同开始Tankster游戏1

2、  同开始Tankster游戏2

3、  同开始Tankster游戏3

4、  同开始Tankster游戏4

5、  同开始Tankster游戏5

6、  Worker分析邀请哪个User,推送(PushNotification

7、  Notification被消息服务(Notification Services)推送至WindowsPhone端。

利用Windows Azure构建联网游戏(Social Game) - 乂乂 - 一个人,一支烟  ·~~

  

手机端PlayerPhoneUser)接收邀请:

1、  连接到Server端,发送接收Command

2、  Phone同时和WindowsAzureStorage同步数据,等待状态(Game State)更新;

3、  同开始Tankster游戏3

4、  同开始Tankster游戏4

5、  同开始Tankster游戏5

6、  WindowsAzure Blob Storage已经获知消息:两个Client准备好开始游戏。

利用Windows Azure构建联网游戏(Social Game) - 乂乂 - 一个人,一支烟  ·~~

  

开始游戏:

1、  Windows8端发起游戏,传送CommandServer

2、  同开始Tankster游戏2

3、  同开始Tankster游戏3

4、  同开始Tankster游戏4

5、  同开始Tankster游戏5

6、  WindowsAzure Blob Storage已经获知消息:游戏开始。

利用Windows Azure构建联网游戏(Social Game) - 乂乂 - 一个人,一支烟  ·~~

  

连接到Socket服务器(Socket Server):

如果所有的信息都通过WAZ Storage来交互,当成千上万的User连接到Tankster的时候,速度就会很慢。所以需要用Socket Server做之后的交互(12)。而WindowsAzure仍然在后台监控Player的操作并保存相应的游戏状态(345),比如Tankster中某个Player的生命值、进行到的关卡等等。这些记录都不需要在终端(Windows8WindowsPhone)进行,从而让终端的运行更加流畅

 

利用Windows Azure构建联网游戏(Social Game) - 乂乂 - 一个人,一支烟  ·~~

 

Social Game的模式

1、  命令和查询分离;(Command – Query Separation

2、  依赖于Windows Azure Storage

    QueuesBlobs

3、  支撑的服务;(Rest Services

4、  Sockets + Web Sockets

 

低耦合的系统(Decoupled Systems

1、   许多独立的系统;(Many Independent Systems

2、   被划分为各个零件;(Scale parts not the entire application

3、   依靠云端服务。(Rely on cloud services

 

命令和查询分离(Command – Query Separation

1、  客户端发送命令到Web服务器;(Send a command to the web server

2、  Web服务器将命令中的信息放到队列中;(Web server enqueues the command’s message

3、  Worker Role从队列中读取消息并执行。(Worker role reads message from queue and acts on message

 

综上,架构流程如下图:

利用Windows Azure构建联网游戏(Social Game) - 乂乂 - 一个人,一支烟  ·~~

  

Code Demo - Javascript Start Game:

GameService.prototype.startGame = function (queueId, success, error) {
    this.serverInterface.sendAjaxPost(this.apiURL + "game/start/" + queueId,
    { gameType: "invitation" }, success, error);
};

ServerInterface.prototype.sendAjaxJsonCommand = function (type, url, data, success, error) {
    $.ajax({
        type: type,
        url: url,
        dataType: "json",
        data: data,
        success: success,
        error: (error != null ? error : this.onAjaxPostError)
    });
};

 

Code Demo - Send Game Command

public HttpResponseMessage SendCommand(GameCommand gameCommand)
{
    var queueClient = account.CreateCloudQueueClient();
    var queue = queueClient.GetQueueReference("gameCommands");
    var serializer = new JavaScriptSerializer();
    var json = serializer.Serialize(gameCommand);
    try
    {
        queue.AddMessage(new CloudQueueMessage(json));
    }
    catch
    {
        return new HttpResponseMessage(HttpStatusCode.InternalServerError,
  "error sending game command. try again.");
    }
    return new HttpResponseMessage(HttpStatusCode.OK, null);
}

 

Code Demo - Process Game Command

public void ProcessCommands()
{
    var queueClient = account.CreateCloudQueueClient();
    var queue = queueClient.GetQueueReference("gameCommands");
    while (true)
    {
        var message = queue.GetMessage();
        if (message != null)
        {
            var serializer = new JavaScriptSerializer();
            var gameCommand = serializer.Deserialize<GameCommand>(message.AsString);
            gameCommandService.DoSomething(gameCommand);
        }
    }
}

 

通讯(Communication

两个通讯的方式:PushPull

 

Push通讯

1、  Real-Time

2、  Requires More Compute Instances

3、  More Cost Effective for fast paced games

Push技术

1、  WebSockets

2、  SignalR

3、  Somewhat limited compatibility on browsers/devices/platforms

Push通讯的结构:

利用Windows Azure构建联网游戏(Social Game) - 乂乂 - 一个人,一支烟  ·~~

  

Pull通讯

1、  Slight delay in game commands

2、  Less compute instances

3、  Increased storage costs

4、  More cost effective for slow paced games

Pull技术

1、  Blob Storage

2、  Http Requests

3、  Compatible on every browser/device/platform

Pull通讯的结构

利用Windows Azure构建联网游戏(Social Game) - 乂乂 - 一个人,一支烟  ·~~

  

如何选择两种通讯方式?

Push或者Pull?快速还是规模?(Speed or Scale

答案是,根据你的实际情况决定。(废话!)

 

接下来讲了TanksterHTML5 Web版移植到Windows8 Metro Style版本的例子。(视频时间2945

改变了一点点布局,加了一点点文件。(言下之意,很简单的意思。)

(进入TanksterDemo卡住了,我们需要特别注意一下Windows8suspendresume,在开发者大会上发生很多次这样的事情了,程序需要杀掉重启或者切换后台程序回来之后才能正常运行。)

创建Social Game的工具箱

利用Windows Azure构建联网游戏(Social Game) - 乂乂 - 一个人,一支烟  ·~~

  

Server APIs

Weapons

Gifts

Achievements

User Profiles

Notifications

Real-Time Communication

User Sessions

Leaderboards

Game Play Commands

 

Generic Server APIs

利用Windows Azure构建联网游戏(Social Game) - 乂乂 - 一个人,一支烟  ·~~

  

另外的资源:

Windows Azure Toolkit for Social Games – watgames.codeplex.com

Nathan Totten’s Blog – ntotten.com

 

最后F&Q时间(视频40:40

 

以上内容大部分来自于Nathan Totten在微软开发者大会上的主题演讲:

Building Social Games for Windows 8 with Windows Azure

视频地址:http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-871T

  评论这张
 
阅读(1565)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017