当前位置:  编程技术>软件工程/软件设计
本页文章导读:
    ▪游戏后台开发九问--linux平台      在游戏中会遇到很多问题,下面大体总结: 这九个选择分别是: 第一,选择什么样的架构。 第二,选择单线程还是多线程。 第三,如何在游戏中使用脚本。 第四,如何处理网络通讯。 .........
    ▪轻量级web框架node.js      一.介绍 nodejs是一个轻量级的webserver框架,和python的bottle很类似,都是轻量级的。写一个web server只需要一行代码就可以。 Node.js的官网为:http://www.nodejs.org/ Bottle的官网为:http://www.nodejs.org.........
    ▪hudson(jenkins)任务设置一天多次构建      每一个hudson任务,都可以配置BuildTriggeers。通过这个配置,来控制构建的频率、时间,触发规则。 其中,如下图所示的Schedule负责配置构建时间 如图所示,表示每天的10点02分做构建。这个.........

[1]游戏后台开发九问--linux平台
    来源: 互联网  发布时间: 2013-11-19

在游戏中会遇到很多问题,下面大体总结:

这九个选择分别是:

第一,选择什么样的架构。

第二,选择单线程还是多线程。

第三,如何在游戏中使用脚本。

第四,如何处理网络通讯。

第五,如何处理游戏通信协议。

第六,如何设计存储结构。

第七,如何设计网络同步。

第八,如何定义性能基准。

第九,如何在不同项目间进行代码复用。

先介绍一下在腾讯开发跟别的公司会有不同,在我内部遵从两个岗位,每个公司里面是按照不同模块来分。为什么会这样分?前台是通过便,后台讲究的是不便,我们不是追求新的技术,而是解决问题。

下面我开始演讲,这是北京最盛名的一座桥,每次都不知道怎么走,越来越复杂。我们每天都会遇到很多选择,所以导致人也不是很愉快。

我现在来讲九个选择,从Q1到Q9,后面一一按照这个顺序做个阐述。

第一,选择什么样的架构?其实是SNS特点决定的,不同的特点决定不同的架构。玩发围绕的是玩家之间偏真实的关系链,位置对玩家是不重要的,玩家之间没有物理上的距离概念,SNSGame是大世界的模式,通用大世界方案的系统必须平行发展。MMO的特点,前几年是一个发展重点,很多人了解也不是很多,它的特点是存在世界地图,位置很重要,有地形概念,每个玩家都有自己的物理坐标。交互频繁,逻辑复杂,交互的实时性要求高,严重依赖于预先设计的游戏内容。小世界有小世界的好处。第一易于就近部署及,减轻国内网络复杂与MMO对网络要求高的矛盾。大家知道网络有很多问题,大家知道问题也解决不了。对MMO来讲,是一个很高的类型,所以会用小世界。

通过分区服务,降低了因为架构导致的运营问题的严重性,小世界的内部在架构上也需要有一定的可伸缩性,这取决于游戏的设计。并不是所有的小世界只有一台服务器搞定,因为它的元素、它的特点对它也会有不同的要求。

在我选择这种架构的时候,我们会有原则,选择什么样的架构取决于游戏自身的设计,这取决于某些特点,并不是所有服务都有同样的需求,并不是大世界就好,小世界就不行。我们不从纯技术角度追求大世界的架构,大世界需要游戏内容的支持,通常美术策划无法支撑百万在线的世界,这是最根本的原因。大世界在架构上有困难,但这是部分不可克服的。

我讲大家非常熟悉的一个例子,通常最复杂的大区概念,大区通常是做帐号,服务器在服务器里面按角色区分。线,就是有的游戏有,有的游戏没有,在这些线里面只是为了扩展这个世界的流量上线,线目前来说只是一个方便,这是一个样对复杂的示意部署视图(PPT)。

我们看一个架构,如果展开来讲,左边是一些辅助服务,右边的Worldsvr像公会的那种会放在这个里面,加在服务器上面,不同的游戏会有不同的处理。这是一个简单的示意图,在不同的游戏里面会有不同的区分。

第二,选择单线程还是多线程?不同的公司会有不同的做法,这个问题并不是所有人都碰到,也有个概率,但是大家也会有争论。争论的原因,通常是双方关注的重点不同,单线程程序的执行只有一条主线,容易跟踪、调试和定位。我们腾讯也不是一定说要这样选择,我们理由非常理由,单线程加异步模式可以提供更好的性能,我们会选择单线程模式。现在我们游戏开发周期很长,在漫长的运行周期里面每周都会更新,交接过程中会有问题的,使用多线程容易导致问题。这个时候我们会进行一些处理,我们对里面的要求角度来看,运行的周期很长、节奏很快,为了达到要求我们可以想更简便的方式。

新形势,对我们也是有一些影响,现在有一些四核以上的CPU出现,这个时候我们会尝试把一些通用的服务,把相对固定的进程变成简单化,这是一个新趋势。

这是适应新趋势的原则,只在必须的时候才使用多线程,如果使用了多线程,尽量减少线程间的交互需求,这样我们就好把握。

第三,如何在游戏中使用脚本?在游戏开发中通常大家都会使用一些脚本。客户端对脚本的需求非常明显,这里主要讨论服务器端。两种使用脚本的方式:一种是C/C++的框架,主要逻辑用C/++编写,脚本用来做一些局部扩展。C/C++的框架,主要逻辑用脚本来编写,耗性能的地方用C/C++决定的。

使用脚本的原则,脚本是一种胶水语言,通常用来隔离变化,易变化的逻辑用脚本实现,快速响应。一般情况下是说这个性能高,那个性能低,上面两种方法没有对错之分,取决于两点,开发团队成员的能力,对不同语言的掌握程度;公司或者项目组的导向,偏重性能还是偏重开发速度,如果是创业型的团队,对性能方面要求多一些,怎么样把游戏做好才是最重要的。

第四,如何处理网络通讯?其实网络通信本身是非常复杂的事情,目前的开发环境已经提供了相对来讲简单得多的编程接口,但是网络程序还是需要处理很多的问题。

两种处理方式:一种是

    
[2]轻量级web框架node.js
    来源: 互联网  发布时间: 2013-11-19
一.介绍 nodejs是一个轻量级的webserver框架,和python的bottle很类似,都是轻量级的。写一个web server只需要一行代码就可以。
Node.js的官网为:http://www.nodejs.org/
Bottle的官网为:http://www.nodejs.org/download/
二.安装说明

linux下的安装命令如下所示:

wget http://nodejs.org/dist/v0.10.5/node-v0.10.5.tar.gz
tar zxvf node-v0.10.5.tar.gz
cd node-v0.10.5.tar.gz
./configure --prefix=/home/zhaolincheung/local/nodejs
make && make intall

注:这里将node.js安装在/home/zhaolincheung/local/nodejs目录下。node.js的安装需要python2.6以上的支持,否则在执行./configure时会出错;node.js还需要gcc-c++的支持,所以系统需要实现安装gcc-c++。

通过 node -v来检查安装是否成功,如果返回:v.0.10.5,则说明安装成功。

至此node.js已经编译并安装完成。如需卸载,可以执行make uninstall进行卸载。

三.简单的hello world程序

学习任何语言或者框架,首先要写的程序就是hello world程序。这里也是这样,我们来写一个简单的hello world程序。

首先,编写helloworld.js,内容如下:

varhttp = require('http');

http.createServer(function(req, res) {
    res.writeHead(200, {'Content-Type':'text/plain'});
    res.end('Hello World\n');
}).listen(10001);

console.log('Server running at http://127.0.0.1:10001/');
其次,执行该文件:/home/zhaolincheung/local/nodejs/bin/node  helloworld.js
最后,通过浏览器访问http://127.0.0.1:1337便得到了hello world的响应。
四.开发进阶 作者在网上看到了一个很好的node.js的入门资料,分享给大家,参考链接为:http://www.nodebeginner.org/index-zh-cn.html#passing-functions-around

代码链接:https://github.com/zhaolincheung/nodejs_demo

 
作者:lianxiang_biancheng 发表于2013-5-9 22:18:48 原文链接
阅读:34 评论:0 查看评论

    
[3]hudson(jenkins)任务设置一天多次构建
    来源: 互联网  发布时间: 2013-11-19
每一个hudson任务,都可以配置BuildTriggeers。通过这个配置,来控制构建的频率、时间,触发规则。
其中,如下图所示的Schedule负责配置构建时间


如图所示,表示每天的10点02分做构建。这个时间表达式的规则,和linux crontab的时间配置规则,是一样的,这里不赘述。这里主要讲,怎么配置一天多次构建。

假如我希望每天的4点和6点都做构建,有以下两种写法
1.


2.


特别注意方法1的写法:多个构建时间之间,通过换行符隔开。如果你希望每天的9点10、10点20构建,就只能使用方法1(如下图所示),方法2没办法描述我们想要的这对时间


作者:lizeyang 发表于2013-5-9 1:19:47 原文链接
阅读:14 评论:0 查看评论

    
最新技术文章:
▪主-主数据库系统架构    ▪java.lang.UnsupportedClassVersionError: Bad version number i...    ▪eclipse项目出现红色叉叉解决方案
▪Play!framework 项目部署到Tomcat    ▪dedecms如何做中英文网站?    ▪Spring Batch Framework– introduction chapter(上)
▪第三章 AOP 基于@AspectJ的AOP    ▪基于插件的服务集成方式    ▪Online Coding开发模式 (通过在线配置实现一个表...
▪观察者模式(Observer)    ▪工厂模式 - 程序实现(java)    ▪几种web并行化编程实现
▪机器学习理论与实战(二)决策树    ▪Hibernate(四)——全面解析一对多关联映射    ▪我所理解的设计模式(C++实现)——解释器模...
▪利用规则引擎打造轻量级的面向服务编程模式...    ▪google blink的设计计划: Out-of-Progress iframes    ▪FS SIP呼叫的消息线程和状态机线程
▪XML FREESWITCH APPLICATION 实现    ▪Drupal 实战    ▪Blink: Chromium的新渲染引擎
▪(十四)桥接模式详解(都市异能版)    ▪你不知道的Eclipse用法:使用Allocation tracker跟...    ▪Linux内核-进程
▪你不知道的Eclipse用法:使用Metrics 测量复杂度    ▪IT行业为什么没有进度    ▪Exchange Server 2010/2013三种不同的故障转移
▪第二章 IoC Spring自动扫描和管理Bean    ▪CMMI简介    ▪目标检测(Object Detection)原理与实现(六)
▪值班总结(1)——探讨sql语句的执行机制    ▪第二章 IoC Annotation注入    ▪CentOS 6.4下安装Vagrant
▪Java NIO框架Netty1简单发送接受    ▪漫画研发之八:会吃的孩子有奶吃    ▪比较ASP和ASP.NET
▪SPRING中的CONTEXTLOADERLISTENER    ▪在Nginx下对网站进行密码保护    ▪Hibernate从入门到精通(五)一对一单向关联映...
▪.NET领域驱动设计—初尝(三:穿过迷雾走向光...    ▪linux下的块设备驱动(一)    ▪Modem项目工作总结
▪工作流--JBPM简介及开发环境搭建    ▪工作流--JBPM核心服务及表结构    ▪Eclipse:使用JDepend 进行依赖项检查
▪windows下用putty上传文件到远程Linux方法    ▪iBatis和Hibernate的5点区别    ▪基于学习的Indexing算法
▪设计模式11---设计模式之中介者模式(Mediator...    ▪带你走进EJB--JMS编程模型    ▪从抽象谈起(二):观察者模式与回调
▪设计模式09---设计模式之生成器模式(Builder)也...    ▪svn_resin_持续优化中    ▪Bitmap recycle方法与制作Bitmap的内存缓存
▪Hibernate从入门到精通(四)基本映射    ▪设计模式10---设计模式之原型模式(Prototype)    ▪Dreamer 3.0 支持json、xml、文件上传
▪Eclipse:使用PMD预先检测错误    ▪Jspx.net Framework 5.1 发布    ▪从抽象谈起(一):工厂模式与策略模式
▪Eclipse:使用CheckStyle实施编码标准    ▪【论文阅读】《Chain Replication for Supporting High T...    ▪Struts2 Path_路径问题
▪spring 配置文件详解    ▪Struts2第一个工程helloStruts极其基本配置    ▪Python学习入门基础教程(learning Python)--2 Python简...
▪maven springmvc环境配置    ▪基于SCRUM的金融软件开发项目    ▪software quality assurance 常见问题收录
▪Redis集群明细文档    ▪Dreamer 框架 比Struts2 更加灵活    ▪Maven POM入门
▪git 分支篇-----不断更新中    ▪Oracle非主键自增长    ▪php设计模式——UML类图
▪Matlab,Visio等生成的图片的字体嵌入问题解决...    ▪用Darwin和live555实现的直播框架    ▪学习ORM框架—hibernate(二):由hibernate接口谈...
▪(十)装饰器模式详解(与IO不解的情缘)    ▪无锁编程:最简单例子    ▪【虚拟化实战】网络设计之四Teaming
▪OSGi:生命周期层    ▪Javascript/Jquery——简单定时器    ▪java代码 发送GET、POST请求
▪Entity Framework底层操作封装(3)    ▪HttpClient 发送GET、POST请求    ▪使用spring框架,应用启动时,加载数据
▪Linux下Apache网站目录读写权限的设置    ▪单键模式的C++描述    ▪学习ORM框架—hibernate(一):初识hibernate
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3