Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 741|回复: 0

游戏开发:Android游戏开发之服务器端

[复制链接]

该用户从未签到

发表于 2011-10-23 11:01:15 | 显示全部楼层 |阅读模式
首先我不知道这篇文章发到Android开发板块是否适合的,因为只部分内容大多数是有关Google appEngine的,但因为这是AppEngine和Android的配合开发,故对Android开发者也有一定的参考意义,故发到这里来了。

其次,在写文章前先谢谢UCWeb Android的产品经理huang,谢谢他的赏识,虽然最后因为一些个人原因我没留在UC,但从笔试和面试的过程中,我发觉UC真是一家严谨、惜才的公司,搞Android的朋友如果有兴趣,可以考虑应聘一下UC的社招。


OK,进入正题!

在做游戏开发的时候,很多游戏都会提供一个全球分数排名的的功能,这就需要使用服务器了,当然,你可以选择搭建自己的服务器,但从成本,稳定性和开发周期上看,我认为Google AppEngine是个很不错的选择,现在Google AppEngine关于python的参考资料比较详尽,java的就比较少,所以我把我写的小Demo放上来,做抛砖引玉之用,因为我也是初学者,所以demo一切从简,大侠请不要见笑哦!

Demo1:对象的存储:

步骤1.定义JavaBean:

Java代码

package com.ray.test;



import java.util.Date;

import javax.jdo.annotations.IdGeneratorStrategy;

import javax.jdo.annotations.IdentityType;

import javax.jdo.annotations.PersistenceCapable;

import javax.jdo.annotations.Persistent;

import javax.jdo.annotations.PrimaryKey;



//标记对象可以持久化

@PersistenceCapable(identityType = IdentityType.APPLICATION)

public class Employee {



        //标记主键,作以后查询之用

    @PrimaryKey

    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)

        private String firstName;

        

        @Persistent

        private String lastName;

        

        @Persistent

        private Date birthDate;

        

        public Employee(String firstName, String lastName, Date birthDate) {

                this.firstName = firstName;

                this.lastName = lastName;

                this.birthDate = birthDate;

        }



        public String getFirstName() {

                return firstName;

        }   

}
复制代码步骤2.存取Bean(可以写在Servlet的doGet()或者doPost()里面):

Java代码

package com.ray.test;



import java.io.IOException;

import java.util.Date;

import javax.jdo.PersistenceManager;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



@SuppressWarnings("serial")

public class HelloServlet extends HttpServlet {

        public void doGet(HttpServletRequest req,

                        HttpServletResponse resp)throws IOException {

               

                resp.setContentType("text/plain");

               

                Employee e = new Employee("Alfred", "Smith", new Date());

                //获取用以存取对象的PersistenceManager

            PersistenceManager pm = PMF.get().getPersistenceManager();

   

        try {

                //存储对象

                resp.getWriter().println("saving object!");

            pm.makePersistent(e);     

        }catch(Exception ex){

                resp.getWriter().println("cannot persistent!");

                ex.printStackTrace();        

        }

        finally {

            pm.close();

        }

        

        try{

                //再次获取用以存取对象的PersistenceManager

                pm = PMF.get().getPersistenceManager();

                //由主键检索对象,Alfred之前被定义为主键的

                Employee newE = pm.getObjectById(Employee.class, "Alfred");

                //读取新对象的信息检测对象检索是否成功

                resp.getWriter().println("Employee:"+newE.getFirstName());

        }catch(Exception ex){

                ex.printStackTrace();

                resp.getWriter().println("cannot get data!");

                pm.close();

        }

        }



        @Override

        protected void doPost(HttpServletRequest req,

                        HttpServletResponse resp)throws ServletException, IOException {

                this.doGet(req, resp);

        }

}
复制代码其中PMF类的代码如下,没看错应该是个单例模式:

Java代码

package com.ray.test;



import javax.jdo.JDOHelper;

import javax.jdo.PersistenceManagerFactory;



public final class PMF {

    private static final PersistenceManagerFactory pmfInstance =

        JDOHelper.getPersistenceManagerFactory("transactions-optional");



    private PMF() {}



    public static PersistenceManagerFactory get() {

        return pmfInstance;

    }

}
复制代码
Demo2.使用Google 账户认证服务:

Java代码

package com.ray.test;



import java.io.IOException;



import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



import com.google.appengine.api.users.UserService;

import com.google.appengine.api.users.UserServiceFactory;



public class GoogleAccount extends HttpServlet{



        @Override

        protected void doGet(HttpServletRequest req, HttpServletResponse resp)

                        throws ServletException, IOException {

                //创建用户服务

                UserService userService = UserServiceFactory.getUserService();

               

              String thisURL = req.getRequestURI();

              //通过请求对象的 getUserPrincipal() 方法测试用户是否使用 Google 帐户登录

        if (req.getUserPrincipal() != null) {

                //如果有登录,则创建Login地址

                resp.getWriter().println("<p>Hello, " +

                                         req.getUserPrincipal().getName() +

                                         "!  You can <a href=\"" +

                                         userService.createLogoutURL(thisURL) +

                                         "\">sign out</a>.</p>");

        } else {

                //如果没有登录,则创建Login地址

                resp.getWriter().println("<p&gtlease <a href=\"" +

                                         userService.createLoginURL(thisURL) +

                                         "\">sign in</a>.</p>");

        }

        }



        @Override

        protected void doPost(HttpServletRequest req, HttpServletResponse resp)

                        throws ServletException, IOException {

                doGet(req, resp);

        }        

}
复制代码手机访问登录效果:



需要特别指出的是,Google通过在web.xml里面配置权限来区分登录者的权限,可以用下面的代码来配置安全常量从而划定只能由admin访问的区域---admin路径下的所有页面:


Xml代码

        <security-constraint>

        <web-resource-collection>

            <url-pattern>/admin/*</url-pattern>

        </web-resource-collection>

        <auth-constraint>

            <role-name>admin</role-name>

        </auth-constraint>

    </security-constraint>
复制代码
回复

使用道具 举报

该用户从未签到

发表于 2011-10-23 11:01:19 | 显示全部楼层

Re:游戏开

之所以想学习安卓开发,就是想做出一款网络游戏的,
虽然我现在什么都不会,但是我会像楼主学习的,你的服务端代码我先收拉
谢谢了
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-23 11:01:22 | 显示全部楼层

Re:游戏开


代码代码,多可爱的代码,我代表月亮谢谢你!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-23 11:01:26 | 显示全部楼层

Re:游戏开

学习一下
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-23 11:01:30 | 显示全部楼层

Re:游戏开

不错
新人学习了...
并且表示感谢,
研究去了...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 13:47 , Processed in 0.463232 second(s), 51 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表