`
duker
  • 浏览: 105611 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sun game server (sgs)初探

阅读更多

 

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

SGS 提供的主要功能 :

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

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

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

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

<!---->l  <!---->可扩展的机制 : 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/ ).

下面是一个实际的 sgs 应用例子 : 一个支持两人对战的俄罗斯方块 . 客户端改编自一个开源的 flash/as3 的方块游戏 (http://flashgamecode.net/tetris ). 为了简单起见 , 目前服务器端启动后仅有一个房间 , 房间只允许二人对战 , 客户端连接上后如果房间已经有两人并且都开始了游戏 , 则游戏开始 , 否则等待 . 更多的功能 , 例如对方状态显示 , 房间列表 , 支持更多人对战等 , 考虑在以后逐步添加 . 下面是使用说明 :

一共是两个包 server.zip,client.zip. server.zip 中是一个 eclipse project 目录 , 其中包含了一个 bat 文件 : runserver.bat. 解压后运行 , 如果看到 :

 

“sgsApp: application is ready” 说明服务器程序已经正常启动 , 可以等待连接了 .

Client.zip 中包含了 fla 文件和响应的 as 文件 . Blox.swf 是已经编译好的程序 , 运行两次 , 然后分别开始游戏 , 可以看到只有两个程序同时连接上后 , 游戏才开始 . 和普通的俄罗斯对战一样 , 如果某一方连续消除了 n , 那么对方就会自动在底部增加 n-1 , 如图 :

 

Config.conf 是配置文件 , 目前有两项配置 , 服务器主机 (host), 连接端口 (port). 缺省配置是 localhost,1139, 即默认服务器和客户端在同一机器上 , 如果想在另外一台机器上运行客户端 , 更改配置即可 .

在运行时 flash 会报安全沙箱问题 , 解决方法请参见我的另外一篇文章 解决开发环境下的 flash player 安全沙箱问题 ” (http://duker.iteye.com/admin/blogs/150579 )

server 端如果运行第二次以上 , 会出现 exception, 这可能是 sgs bug 导致 , 不影响正常发挥功能 .

 

  • 大小: 119.7 KB
  • 大小: 14.5 KB
17
5
分享到:
评论
9 楼 kinsonleung 2013-06-07  
ava.rmi.ConnectException: Connection refused to host: 10.1.1.53; nested excepti
on is:
        java.net.ConnectException: Connection refused: connect

这是什么问题啊
8 楼 yysct2005 2011-05-26  
java webgame开发,游戏服务器,游戏设计

q群:33431550

欢迎加入交流,谢谢
7 楼 daoyu 2008-10-28  
问一下 找开服务器报错是怎么回事?
lients
警告: Notifying 5,121 of node status changes failed:
java.rmi.ConnectException: Connection refused to host: 10.1.1.53; nested excepti
on is:
        java.net.ConnectException: Connection refused: connect
6 楼 duker 2008-05-04  
lesliewong2006 昨天 删除
不错,很感兴趣。不过现在Java在网络游戏服务器领域还不是主流。
------------------------------------
嗯,是这样的,但java完全有这个潜力.从性能上来看,不成问题,
从系统的开发效率和可维护性上看,要强于c/c++.
所以要努力说服你的老板.
5 楼 metaphy 2008-05-04  
看上去不错。
关注
4 楼 lesliewong2006 2008-05-02  
不错,很感兴趣。不过现在Java在网络游戏服务器领域还不是主流。
3 楼 vdgame 2008-05-01  
不错的,学习一下!
2 楼 Nighthaven 2008-04-30  
哇哦,非常好。
1 楼 wangdei 2008-04-30  
哈哈.我的这个网站就有这点味道的说:
http://www.ipkip.cn 外挂网

相关推荐

    Sun game server

    "SGS"(可能代表"Sun Game Server")是一个强大的游戏服务器平台,它提供了基础架构来支持大规模并发玩家在线游戏。它可能包含了诸如网络协议处理、游戏逻辑执行、数据存储与同步、负载均衡以及安全性管理等核心功能...

    Sun xVM Server使用指南

    ### Sun xVM Server 使用指南详解 #### 一、概述 Sun xVM Server 是一款由Sun Microsystems开发的基于开源Xen Hypervisor技术的虚拟化平台。它支持多种操作系统,并且能够在一个物理服务器上运行多个隔离的操作...

    SUN Directory Server 培训资料

    SUN Directory Server是Sun Microsystems(现已被Oracle收购)开发的一款强大的 Lightweight Directory Access Protocol (LDAP) 目录服务器,主要用于管理和存储组织的各种网络资源信息,如用户账号、权限、配置数据...

    sun app server

    根据给定的文件信息,我们可以提炼出以下与Sun App Server相关的关键知识点: ### 1. 概述 Sun Java System Application Server Platform Edition 9(以下简称Sun App Server 9)是Sun Microsystems公司推出的一款...

    Sun ONE Directory Server

    Sun ONE (Open Network Environment) Directory Server,是Sun Microsystems公司(现已被甲骨文公司收购)推出的一款企业级的目录服务软件。它是一个基于 Lightweight Directory Access Protocol (LDAP) 的目录服务...

    Sun One Directory Server 5.2

    Sun One Directory Server 5.2 是一款由Sun Microsystems(后被Oracle公司收购)开发的企业级目录服务软件。这款产品在2000年代初期广泛应用于组织的网络基础设施中,用以管理和存储用户身份、权限和其他元数据。...

    Sun Directory Server Install Tutorial

    Sun Directory Server 是一款基于 Lightweight Directory Access Protocol (LDAP) 的目录服务软件,由 Sun Microsystems 开发。在进行 Sun Directory Server 的安装教程中,有几个关键的知识点是必须了解的,这些...

    com.sun.net.httpserver.http.jar

    com.sun.net.httpserver

    Sun Java SystemDirectory Server

    ### Sun Java System Directory Server Enterprise Edition 6.3 管理指南 #### 一、概述 Sun Java System Directory Server Enterprise Edition 6.3 是一款高度可扩展且安全的身份存储库解决方案,它支持企业级...

    Sun Java System Directory Server.5.2

    Sun Java System Directory Server 5.2 是一款由Sun Microsystems开发的企业级 Lightweight Directory Access Protocol (LDAP) 服务器。作为目录服务的核心组件,它被设计用于存储、管理和检索大量结构化数据,如...

    Sun Directory Server(Ldap)实例创建手册

    Sun Directory Server,也被称为Sun One Directory Server,是Sun Microsystems(现已被Oracle公司收购)开发的一款强大的 Lightweight Directory Access Protocol (LDAP) 服务器。LDAP是一种开放标准的目录服务协议...

    JAVA HTTP 发送 接收 com.sun.net.httpserver包 demo

    在Java中,我们可以使用多种库来实现HTTP通信,其中包括`com.sun.net.httpserver`包,这是一个内置的轻量级HTTP服务器,适用于测试、原型设计以及简单的应用。本示例将详细介绍如何使用`com.sun.net.httpserver`包...

    Sun Java SystemApplication Server9.1管理指南

    ### Sun Java System Application Server 9.1 管理指南 #### 一、入门与概述 **Sun Java System Application Server 9.1**是一款由Sun Microsystems公司开发的企业级应用程序服务器,旨在提供强大的运行环境,支持...

    Sun Enterprise Server Alternate Pathing 2.3.1 -34

    Sun Enterprise Server Alternate Pathing 2.3.1 -34 是一款由Sun Microsystems公司推出的针对企业级服务器的存储路径管理软件。这个版本主要是为了解决数据中心的冗余路径和故障切换问题,确保在硬件故障或其他网络...

Global site tag (gtag.js) - Google Analytics