webgame

不同游戏类型的游戏服务端设计与电商的不同

星期四, 一月 5th, 2017 | webgame, 游戏开发 | 没有评论

本文来源于 DBAplus社群 韩伟 讲师的微信分享整理 (因无法获取微信中此文章的永久链接,故无法提供原文链接,见谅)

韩伟(腾讯科技互娱研发部架构师)
曾在网易任职8年,担任无线事业部产品总监。
多年来一直从事技术开发,擅长开发高性能系统,对于软件架构设计也有丰富的经验。
个人的技术兴趣在设计模式、软件体系架构等提高软件开发效率方面的知识

剖析的很不错,转载给以后回头总结及分享给更多游戏开发者

主题简介:
1、游戏类业务的通信模型分析
2、游戏类业务的数据处理流程分析
3、‍一般缓存系统的特点在游戏中的问题
4、现代游戏服务器端的几个典型运行时架构

一、背景

在中国的互联网诸多业务领域中,游戏一直是充当“现金牛”而存在的。常言道“隔行如隔山”,游戏领域和互联网其他领域确实可以说是不同的两个行业。但是,在游戏服务器端开发领域中的很多重要问题,并没有被明确的分辨出其特异性,从而得到专门的对待。

我们不管是在业界开源领域,还是内部分享中,很少会有专门针对游戏业务特征进行专门设计的组件、类库或者框架。我们从游戏的客户端方面来看,一款专业的游戏客户端引擎,已经是游戏开发的标配,比如最早的Flash Builder,到后期的Cocos2d-X,Unity,Unreal;但是服务器端,我们几乎找不到同样重量级的产品。

在游戏服务器端开发所有要面对的问题中,有两个是最核心和最普遍的:一是和客户端的通讯;二是游戏登录用户的数据处理。对于和客户端通讯的这个问题,大量的游戏开发者会使用“通用”的开源组件,比如Protocol Buffer、Thrift、Jetty、Node.js等等通信或RPC框架。虽然针对游戏,还是要做大量的改造,但一般都有很多现成的代码可供修改。

› Continue reading

Tags:

centos快速安装redis部署

星期二, 六月 16th, 2015 | linux, webgame | 没有评论

每次部署环境的时候都要去安装下,写下文章记录下:
官方快速引导地址:http://redis.io/topics/quickstart

这里只是安装单实例版本,默认是6379的端口版本,预留配置文件等做多实例部署

1.安装redis最新的3.0.2版本

$ wget http://download.redis.io/releases/redis-3.0.2.tar.gz
$ tar xvzf redis-3.0.2.tar.gz
$ cd redis-3.0.2
$ make

2.复制执行文件到bin下(或者执行make install),若执行make test 请先yum install tcl

$ cp src/redis-server /usr/local/bin/
$ cp src/redis-cli /usr/local/bin/

› Continue reading

Tags: , , ,

erlang之gen_server的例子

星期二, 八月 19th, 2014 | erlang, webgame | 没有评论

一个简单版的gen_server的demo例子(银行存款问题了)
同时加了一个自动存钱的功能
› Continue reading

Tags: ,

erlang的加加(++)减减(–)解释

星期四, 八月 14th, 2014 | erlang, webgame | 没有评论

一句话总结 erlang的 ++ 和—— 都是 右结合 即先计算最右边 (见如下代码)

12> [1,2,3] -- [1,2] --[3].
[3]
13> [1,2,3] -- [1,2] --[2] .
[2,3]
14> [1,2] -- [3].
[1,2]
15> [1,2] ++ [1,2] ++ [3].
[1,2,1,2,3]
16> [1,2] ++ [2,1] ++ [3].
[1,2,2,1,3]

实际上++ 右结合是无所谓的,最总结果都是一样,–要特别注意 看下面的解释就会一下子明白过来了
代码执行解释:
[1,2,3]–[1,2]–[3].
先运算[1,2]–[3].
结果还是[1,2]
然后是运算[1,2,3]–[1,2]。
结果就是[3]

Tags:

libcurl升级后找不到libcurl.so.3解决之法

星期日, 二月 3rd, 2013 | linux, webgame, 游戏开发 | 没有评论

系统装的是libcurl 7.19的版本,编译的动态库是libcurl.so.4

自己的程序编译是在libcurl 7.15的版本下编译的,用的是libcurl.so.3的版本,要做下软链接即可:
根据自己使用的是32位系统或者64位系统 做如下处理:

1
2
cd /usr/lib 或者 cd /usr/lib64
ln -s libcurl.so.4 libcurl.so.3

Tags: , ,

使用libcurl为webgame服务端增加http访问功能

星期三, 一月 30th, 2013 | webgame, 游戏开发 | 没有评论

webgame的服务端代码使用c/c++开发,现在要使用http协议访问外网进行验证,为游戏增加这个功能,使用了比较出名的libcurl的库

用起来很方便,代码封装如下:

简介:1.安装curl的库 http://curl.haxx.se/libcurl/

2.对应的功能示例也蛮丰富的(自己根据实际需求改造了下)

3.编译下面的代码

1
g++ -l curl -o tcurl sq_curl.c

› Continue reading

Tags: , , ,

在线的棋牌类网络游戏java服务端实现

星期六, 一月 19th, 2013 | JAVA-and-J2EE, webgame, 游戏开发 | 没有评论

自己一直从事 页游开发看到一篇做游戏服务端的开发文章自然要收录下.(本文算是记录的蛮详细的,不过具体的性能优化,缓存,消息的处理等都不在其中,整体宏观列出了.)

本文来源于网络,好久之前看的,被收藏后一直没有看,今天看了后收藏到网站,原文地址:http://kakaluyi.iteye.com/blog/1489592.
一、网络

  网络游戏,首先面临的问题当然是如何进行网络通信。首先考虑的是HTTP协议,因为所有的J2ME手机都支持这个,我们当然想尽可能的兼容用户。而且HTTP协议封装程度已经非常高了,不用去考虑线程、同步、状态管理、连接池,不过HTTP协议有两个不爽的地方:

   ◇ 协议无状态,这个问题已经困扰过很多人很多次了。我曾考虑过的解决办法是改造HTTP协议,在数据传输完成之后不关闭socket,但是这样做工作 量非常大,在项目周期中,基本上就是Mission impossible,不予考虑。那么客户也就只能通过轮询的方式向服务器请求数据。

   ◇ 网络流量过大。就这个项目来说,网络间传递的只是指令,但是每次传递都要加上一堆毫无用处的HTTP Head,再加上客户端需要做轮询,这个流量 对于手机来说简直恐怖,经简单测试,按照0.03元/K的GPRS网络费用计算,一局牌居然要消耗1元多的费用(每秒轮询),实在不可接受。也许我们可以 采用流量费包月的资费方式,不过这个话题与技术无关。

  以上问题导致我们选择了Socket,这意味着我们将没有一个web环境,很多东西都要靠自己去实现:线程管理、客户状态监控、对象池、控制台……….

   网络部分打算采用Java NIO来实现,这是一种新的网络监听方式,基于事件的异步通信,可以提高性能。每个客户端连接之后,会有一个独立的 SocketChannel与它通信,这个SocketChannel会在用户的整个生存周期中存在。用户如果断开连接,服务器会得到-1,并且会抛出 Connection reset异常,通过捕获这两个特征,可以在用户意外断开连接后清理相关的资源。由于NIO是异步通信的,所以没有复杂的线程管 理。

二、通信协议
› Continue reading

Tags: , ,

webgame遭遇double free or corruption (!prev):

星期二, 十二月 4th, 2012 | linux, webgame, 游戏开发 | 没有评论

游戏在内测的时候遭遇到double free or corruption (!prev):
单从上面的理解很简单就是说 有地方调了2次 free();的内存释放函数.
查了下,这种低级错误的可能性不大,但是游戏的环境是在 一个多线程的代码,在主线程中申请了一块内存,在另一个线程中释放内存,估计是这个原因.

*** glibc detected *** /home/sara/webgame/t1: double free or corruption (!prev): 0x090634c8 ***
======= Backtrace: =========
/lib/libc.so.6[0x7c7261]
/home/sara/webgame/t1[0x804891e]
/home/sara/webgame/t1[0x9804fb0]
/lib/libpthread.so.0[0x8dcab5]
/lib/libc.so.6(clone+0x5e)[0x83383e]
00759000-008c7000 r-xp 00000000 fd:00 158979 /lib/libc-2.11.so
008c7000-008c8000 —p 0016e000 fd:00 158979 /lib/libc-2.11.so
008c8000-008ca000 r–p 0016e000 fd:00 158979 /lib/libc-2.11.so
008ca000-008cb000 rw-p 00170000 fd:00 158979 /lib/libc-2.11.so

进过排查和结合网上的遇到的说明修正如下函数:(另:可以在你做free()的统一函数地方做赋值指针为null做检测)
› Continue reading

Tags: , ,

游戏服务端C/C++与脚本语言(php,Lua,Squirrel)共服务

星期五, 八月 31st, 2012 | webgame, 游戏开发 | 一条评论

前两年一直用java做页游的服务端编程,也没有想过对应的语言混合编程,毕竟java可以一种搞定,效率上也还不错.
现在就职的技术老大以前是做客户端游戏出身的,c/c++功力比较牛,技术上就采用 c + Squirrel(一种类似Lua的脚本),刚好在网上看到有人提出为什么要脚本加C,简要回答记录下.

实际上只要底层通信和数据层做好对应的框架后(c封装并提供接口),游戏开发的关键还主要在 对策划功能的理解和实现,即功能实现的设计方案,主要业务逻辑的处理,偶尔也要呼唤底层c的支持而已. 个人的一点认识.

提问:
游戏服务端程序使用PHP与C交互实现与客户端通信,C负责实现处理聊天频道、地图、组队什么的,为什么要这么设计?使用PHP直接与客户端交互不行吗,或者只使用C。各负责什么模块,在这些方面有什么优势?

简要回答:
1.个人认为从语言特性,开发成本,以及项目组人员构成等方面考虑,这么设计应该是可以理解的。
C言语开发的工具运行效率高,但开发难度大,而像游戏中的聊天、地图、组队等功能其实各游戏之间的差别不会特别大,有经验的开发人员可以很容易的将别的游戏类似功能组件移植过来使用。
php言语开发的功能运行效率稍差,但开发成本要低得多,调整灵活,用php来处理一下业务逻辑是非常适合的。
另外像我们公司的游戏的一些对外接口,如跟平台之间的交互接口,我们平台部这边也一般是建议他们使用php来进行开发的。
对于做架构,我个人认为言语并不是最重要的,系统的瓶颈往往也不是因为某种语言,可以根据不同的需要使用不同的语言来进行灵活处理。
› Continue reading

Tags: , , , , , ,

云时代的到来之Cloud对网页游戏开发的影响

星期一, 八月 27th, 2012 | webgame | 没有评论

现在facebook上有不少游戏已经开始使用amazon的aws来部署游戏,我们作为国内的WEBGAME Designer需要做好准备.

对于创业性的团队来说可以考虑之,既能减少成本开始还提供一定的稳定性,做好定时的数据备份就可以保证游戏的服务稳定性了.

云计算我们可以省却很多以前需要考虑的事:
1、安全。云计算提供了最可靠、最安全的数据存储中心,用户不用再担心数据丢失、病毒入侵等麻烦。
2、性能扩展。云计算扩展性能非常容易,当我们游戏某处出现瓶颈时,只要申请增加相应的资源就行。

这样我们就可以把更多精力放到了游戏的设计及开发上了。
另外一个方面,由于云计算使用数据存储方式、部署架构等都跟我们传统的不一样,所以在做游戏开发时,也需要针对不同的变化采用不同的实现方式。

使用云计算的方式在维护也节省了不少时间,还获得动态伸缩的能力,这是最大的优点。

但是我觉得对小的游戏开发者来说这是一个优点,但是有一个很大的问题是不可控。

比如亚马逊服务器宕机事件发生时,如果没有备份和应对机制,对大的游戏厂商来说这就是大灾难

Tags: , , , ,

Search

文章分类

Links

Meta