开发者社区> 最美的回忆> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

sun game server (sgs)初探

简介:
+关注继续查看

sun game server (sgs)初探

文章分类:Java编程 关键字: flex game

Sun game server , 简称 (sgs) 是 sun 公司的一个开源项目 , 主要目标是针对 mmo 游戏的服务器端开发 . 最初是从 Nighthaven 的博客文章 (http://nighthaven.javaeye.com/blog/181431 ) 上了解到 sgs 项目 , 在大致了解了一下它提供的功能后 , 对其发生了兴趣 , 经过一段时间的研究 , 有了一些心得 . 下面就是这些心得的一个总结 , 最后提供一个使用 sgs 做服务器的对战俄罗斯 .

SGS 提供的主要功能 :

服务器端的扩展 : 传统的扩展方法是将整个游戏区域分成多个区 , 不同的区运行在不同的游戏服务器上 . 这带来两个问题 , 一个是处于不同区的玩家不能互相交互 , 另外一个是如果某个区发生的动作较少时 , 会出现服务器资源未被充分利用的情况 . 而在 sgs 的处理方式下 , 所有的处理被分割成为一个个小的执行单元 ( 称为 task), 这些 task 可以在组成网络的任何 sgs 服务器上执行 , 当用户增加时 , 系统自动增加处理线程 , 不再需要为了扩展而将不同的区分配到不同的服务器上面 . 这样既提高了资源利用率 , 又可以让所有的玩家进行交互 .

数据完整性 : sgs 提供了一个分布式的数据存储 , 一个 task 需要访问数据时 , 通过数据存储 api 进行访问 , 数据访问具有事务支持 , 当两个 task 发生冲突时 ,sgs 会自动协调 , 较年轻的 task 重新调度等待执行 , 而年老的 task 将会执行并直到结束 . 当前版本中的 sgs 数据存储未使用关系数据库 , 而是使用了 berkeley db. 任何 java 对象 , 只要实现了 ManagedObject 标志接口 和 Serializable 接口后即可自动透明存储 .(sgs 的存储机制好像是可扩展的 , 论坛上已经看到有人在讨论 mysql 的存储插件 )

简单的编程模型 : 从应用开发的角度来看 ,sgs 提供了 api 屏蔽了多数的底层复杂性 , 例如线程调度 , 事务处理 , 等等 , 应用程序只需要开发并装配自己的对象 , 监听响应客户端事件 , 自己管理持久化的 ManagedObject 对象生命周期即可 .

两种通信模型 : 一种是 client/server 的通信 , 即每个 client 只和 server 通信 , 由 server 来负责数据的处理和转发 . 另外一种是 channel 机制 ( 类似一对多的广播 ),channel 由 server 创建并维护 , 每个 channel 可以添加多个 client,server 可以监听 channel 中的所有通信或者具体某个 client 的通信 . 也可以给 channel 中的全部或者部分 client 发送消息 . 加入 channel 的 client 可以收到其它任何 client 发送的消息 .channel 下面 client 之间的通信不需要 server 端的介入 . 由于所有通信的数据格式都是字节数组 , 所以应用程序需要开发自己的应用层协议 .

可扩展的机制 : sgs 应用程序访问数据 , 使用 channel, 创建 task 都是通过 ”Manager” 来进行的 . 目前一共有三种缺省的 ”Manager” ,DataManager,ChannelManager,Taskmanager. 但可以扩展开发自己的 Manager, 例如在 sgs 中要求 task 应该是尽量快的执行 (task 允许执行的时间上限可以配置 ) , 所以如果出现调用可能导致阻塞的系统方法时 , 就需要开发一个扩展的 Manager.

目前 sgs 提供了 c 和 java 的客户端库 , 但协议是开放的 , 已经有人开发出了支持 as3 和 python 的客户端库 (https://darkstar-as-client.dev.java.net/ ).
本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/archive/2010/06/13/1757705.html如需转载请自行联系原作者

jiahuafu

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
api server(初始化)——node.js后端
api server(初始化)——node.js后端
12 0
【Agones系列】Game Server的生命周期
本文介绍了Agones中GameServer的生命周期管理
175 0
SQL Server索引视图以(物化视图)及索引视图与查询重写
原文:SQL Server索引视图以(物化视图)及索引视图与查询重写   本文出处:http://www.cnblogs.com/wy123/p/6041122.html      经常听Oracle的同学说起来物化视图,物化视图的作用之一就是可以实现查询重写,听起来有一种高大上的感觉,  SQL Server也有类似于Oracle物化视图的功能,只不过叫做索引视图。
1073 0
SQL Server跨域查询
exec sp_addlinkedserver 'linkserver','','SQLOLEDB','192.168.1.200' EXEC sp_addlinkedsrvlogin 'linkserver','false',NULL,'sa','123456' select * from linkserver.
1231 0
Oracle\MS SQL Server Update多表关联更新
原文:Oracle\MS SQL Server Update多表关联更新 一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新。而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。
1129 0
Web Service依赖的jar包介绍
This directory includes the CXF jar, the CXF manifest jar, the required dependencies, and many optional dependencies. The "modules" directory contains the cxf.jar split up into smaller pieces if
1722 0
webgame开发中的文件解密
上一篇讲的是文件的加密,这一篇记录一下如何加载并显示图片。   因为图片文件经过加密,已经成了二进制流的文件了(一堆乱码),只能使用URLStream来加载资源了。 这里有一点要注意:URLStream中的读取操作是非阻塞的,在读取数据之前必须使用bytesAvailable属性来确定是否能够获取足够的数据,如何不能获取足够的数据,将引发EOFError异常。
769 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Apache Wicket User Guide - Ref
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载