不指定 2009/07/25 00:22
亲爱的朋友,又是我。。。阴魂不散的我,
人称MM见愁的就是我。
只要有美女,就会有我的出现。
无奈世事变迁,沧桑轮转,眼力劲儿也不行鸟。最近活跃的MM都不认识了。
不知道是我的悲哀,还是91的沉沦。
我向玩家们承认错误,我最近关心91d2的管理上面的问题着实少了些。
好吧,言归正传。(就说最后一句,如果论坛新来了MM,大家一定要记得通知我哦。。。。)

91d2的最终目标是建立一个暗黑玩家的乐园,
让众多的暗黑玩家能有一个永远游戏暗黑的平台。
91d2真身是2006年7月20日左右成立,但是经过几次荒唐的重新开荒与倒闭,
才有了今天的91d2.
记得草莽MM说过,Max阿。。你丫写点东西 可别又太监了。。
这次不能阿,我得给大家汇报下情况。

1,有关rmb交易。
真相、黑幕是很多人最关心的话题。有人打着我的旗号招摇撞骗,
有人也借我的名号威震八方,这些我都知道,
并且我都知道具体都是谁干的。但是我实在没找个能力去弄死他,
只能防、只能治,效果如何,我自认为凑合。
事实终究是事实,问心无愧是一种境界。
中国文化的博大精深不仅仅在于强大的描述能力,
还在于它无穷的雄辩文采。小人与君子的一线之隔,也仅是因为他们的胸襟。
所以,很多小人的雄辩能力只能让我这个学历不高的管理学学子望文兴叹,
真的说不过他们。
ok,相安无事,我干自己该干的。就ok了。
我们的GM团队会一直把这个作为一个非常重要的工作区处理滴。

2,有关战网管理。
很多明眼人一定都看出来了,
91d2的管理其实不是管理人员的素质问题,也不是能力的问题,
而是沟通渠道不够通畅。
很多简单的问题,都复杂化了,很多复杂的问题都便得无法解决了。
所以,(上面貌似有错字,不管了,这是我的风格),近期会考虑调整一下管理解决,
让专人负责各种投诉及论坛纠纷的处理,
让斑竹、总版主都去执行事务性工作,而把纠纷交给一位德高望重的老人来权衡,
并从中协调解决各方面需要的资源。

3,有关服务器速度的问题。
这个问题其实不想说,91d2的服务器组,全国暗黑界无人能敌。
这一句话就足够了。

4,稳定性,安全性,公平性。
事在人为,我会努力,
我也会鞭策我们的管理人员努力。
有些时候,需要一点点理解。投诉群看了很多玩家的发言,我都小小的开心一下,
有一些玩家真是很理解我们。
所以最终的结果也是大家都很满意。
错误,在所难免。解决问题自然有解决问题的办法,互相理解是第一位的。

5,91d2的发展问题。
缺钱,这是根本。但是我会解决。

好了,废话少说,用事实来说话。
我不喜欢来虚的,是爷们就干活。
我说,我真的很爱你们。这话。发自肺腑的,麻痹。

真爱,不是扯犊子。

我好多次看到一些玩家的话,我的眼睛就酸酸的。
多愁善感嘛,爷们归爷们,我也有柔情的一面。
也许,这也是为什么那么多MM喜欢我的原因。
好了,做事去了。

顺祝,
夏安!
不指定 2009/07/23 16:12
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。正是由于这个特点,单例对象通常作为程序中的存放配置信息的载体,因为它能保证其他对象读到一致的信息。例如在某个服务器程序中,该服务器的配置信息可能存放在数据库或文件中,这些配置数据由某个单例对象统一读取,服务进程中的其他对象如果要获取这些配置信息,只需访问该单例对象即可。这种方式极大地简化了在复杂环境下,尤其是多线程环境下的配置管理,但是随着应用场景的不同,也可能带来一些同步问题。

  本文将探讨一下在多线程环境下,使用单例对象作配置信息管理时可能会带来的几个同步问题,并针对每个问题给出可选的解决办法。

  问题描述

  在多线程环境下,单例对象的同步问题主要体现在两个方面,单例对象的初始化和单例对象的属性更新。

  本文描述的方法有如下假设:

  1. 单例对象的属性(或成员变量)的获取,是通过单例对象的初始化实现的。也就是说,在单例对象初始化时,会从文件或数据库中读取最新的配置信息。

  2. 其他对象不能直接改变单例对象的属性,单例对象属性的变化来源于配置文件或配置数据库数据的变化。

  1.1 单例对象的初始化

  首先,讨论一下单例对象的初始化同步。单例模式的通常处理方式是,在对象中有一个静态成员变量,其类型就是单例类型本身;如果该变量为null,则创建该单例类型的对象,并将该变量指向这个对象;如果该变量不为null,则直接使用该变量。

  其过程如下面代码所示:

public class GlobalConfig {
  private static GlobalConfig instance = null;
  private Vector properties = null;
  private GlobalConfig() {
   //Load configuration information from DB or file
   //Set values for properties
  }
  public static GlobalConfig getInstance() {
   if (instance == null) {
    instance = new GlobalConfig();
   }
   return instance;
  }
  public Vector getProperties() {
   return properties;
  }
 }

  这种处理方式在单线程的模式下可以很好的运行;但是在多线程模式下,可能产生问题。如果第一个线程发现成员变量为null,准备创建对象;这是第二个线程同时也发现成员变量为null,也会创建新对象。这就会造成在一个JVM中有多个单例类型的实例。如果这个单例类型的成员变量在运行过程中变化,会造成多个单例类型实例的不一致,产生一些很奇怪的现象。例如,某服务进程通过检查单例对象的某个属性来停止多个线程服务,如果存在多个单例对象的实例,就会造成部分线程服务停止,部分线程服务不能停止的情况。

  1.2 单例对象的属性更新

  通常,为了实现配置信息的实时更新,会有一个线程不停检测配置文件或配置数据库的内容,一旦发现变化,就更新到单例对象的属性中。在更新这些信息的时候,很可能还会有其他线程正在读取这些信息,造成意想不到的后果。还是以通过单例对象属性停止线程服务为例,如果更新属性时读写不同步,可能访问该属性时这个属性正好为空(null),程序就会抛出异常。

  解决方法

  2.1 单例对象的初始化同步

  对于初始化的同步,可以通过如下代码所采用的方式解决。

 public class GlobalConfig {
  private static GlobalConfig instance = null;
  private Vector properties = null;
  private GlobalConfig() {
   //Load configuration information from DB or file
   //Set values for properties
  }
  private static synchronized void syncInit() {
   if (instance == null) {
    instance = new GlobalConfig();
   }
  }
  public static GlobalConfig getInstance() {
   if (instance == null) {
    syncInit();
   }
   return instance;
  }
  public Vector getProperties() {
   return properties;
  }
 }

  这种处理方式虽然引入了同步代码,但是因为这段同步代码只会在最开始的时候执行一次或多次,所以对整个系统的性能不会有影响。

  2.2 单例对象的属性更新同步

  为了解决第2个问题,有两种方法:

  1,参照读者/写者的处理方式

  设置一个读计数器,每次读取配置信息前,将计数器加1,读完后将计数器减1.只有在读计数器为0时,才能更新数据,同时要阻塞所有读属性的调用。代码如下。

 public class GlobalConfig {
private static GlobalConfig instance;
private Vector properties = null;
private boolean isUpdating = false;
private int readCount = 0;
private GlobalConfig() {
  //Load configuration information from DB or file
   //Set values for properties
}
private static synchronized void syncInit() {
 if (instance == null) {
  instance = new GlobalConfig();
 }
}
public static GlobalConfig getInstance() {
 if (instance==null) {
  syncInit();
 }
 return instance;
}
public synchronized void update(String p_data) {
 syncUpdateIn();
 //Update properties
}
private synchronized void syncUpdateIn() {
 while (readCount > 0) {
  try {
  wait();
  } catch (Exception e) {
  }
 }
}
private synchronized void syncReadIn() {
 readCount++;
}
private synchronized void syncReadOut() {
 readCount--;
 notifyAll();
}
public Vector getProperties() {
 syncReadIn();
 //Process data
 syncReadOut();
 return properties;
}
 }

  2,采用"影子实例"的办法

  具体说,就是在更新属性时,直接生成另一个单例对象实例,这个新生成的单例对象实例将从数据库或文件中读取最新的配置信息;然后将这些配置信息直接赋值给旧单例对象的属性。如下面代码所示。

 public class GlobalConfig {
  private static GlobalConfig instance = null;
  private Vector properties = null;
  private GlobalConfig() {
   //Load configuration information from DB or file
   //Set values for properties
  }
  private static synchronized void syncInit() {
   if (instance = null) {
    instance = new GlobalConfig();
   }
  }
  public static GlobalConfig getInstance() {
   if (instance = null) {
    syncInit();
   }
   return instance;
  }
  public Vector getProperties() {
   return properties;
  }
  public void updateProperties() {
   //Load updated configuration information by new a GlobalConfig object
   GlobalConfig shadow = new GlobalConfig();
   properties = shadow.getProperties();
  }
 }

  注意:在更新方法中,通过生成新的GlobalConfig的实例,从文件或数据库中得到最新配置信息,并存放到properties属性中。

  上面两个方法比较起来,第二个方法更好,首先,编程更简单;其次,没有那么多的同步操作,对性能的影响也不大。



不指定 2009/07/23 16:10
一台服务器 几乎所有网站打开网页 甚至HTML网页 都出现了



这种样式的代码 有的在头部 有的在尾部 部分杀毒软件打开会报毒

打开HTML或ASP PHP页面 在源码中怎么也找不到这段代码

分析原因

首先怀疑ARP挂马,用防ARP的工具又没有发现有arp欺骗

而且arp欺骗一般不会每次都被插入代码,而是时有时无

而且使用http://127.0.0.1 或者http://localhost 访问的时候也可以找到这段代码

arp欺骗的可能排除。

然后就想到可能是JS被篡改,或者是其它的包含文件,查找后没有发现被改的页面 连新建的HTML页面浏览的时候也会被插入这段代码,那就只能是通过IIS挂上去的了。

备份iis数据然后重装iis,代码消失,将备份的iis恢复,问题又来了。

仔细寻找,问题应该出在IIS的配置文件上,打开配置文件,没有发现那段代码。

那很有可能是调用了某个文件,这个怎么查啊,忽然想起了大名鼎鼎的Filemon

本地载了一个上传到服务器上,打开Filemon,数据太多了,过滤掉一些没有用的

只留下iis的进程,数据还是很多,看来服务器上的站点还是挺多人在访问的。

关掉所有站点,建了一个测试站点anky 目录为D:\www\ 在下面建了一个空白页面test.htm

访问一下这个页面代码被插进来了,再看一下Filemon 奇怪怎么读取C:\Inetpub\wwwroot\iisstart.htm

打开C:\Inetpub\wwwroot\iisstart.htm一看,里面就躺着



把代码删除了留空,访问test.htm 正常了,把C:\Inetpub\wwwroot\iisstart.htm删除了再访问

test.htm 出现 “读取数据页脚文件出错”问题就出这里了,看来是调用了

这个文件。

把C:\Inetpub\wwwroot\iisstart.htm清空就正常了,这样怎么行,解决问题当然要连根拔掉。

continue

有没有可能是扩展造成的,到扩展中检查了一遍全部都是正常的

当然 通过ISAPI 挂马的也是存在的

左想右想最后还是觉得配置文件有问题

打开配置文件,配置文件在%windir%\system32\inetsrv\MetaBase.xml

用记事本打开,查找iisstart.htm 找到一行,开始以为是默认站点,后来一想不对啊

默认站点都删除了,再仔细一看这句代码为

DefaultDocFooter="FILE:C:\Inetpub\wwwroot\iisstart.htm"

删除掉这一行,问题彻底解决了
不指定 2009/07/23 16:09
  91D2盛大开荒...征文活动成功举办...

  离不开一直以来默默支持我们的朋友...谢谢大家..
  
  这一次征文虽然说不上是百花齐放,也算得上异彩纷呈,着实让评委们伤透了脑筋。

  取舍之间,左右为难。

  然而,失落与幸运是孪生兄弟。

  如同我们在游戏在生活中mf一般,没有失意,哪有惊喜。

  在此,先向没有获奖的朋友们说一声:感谢你们的参与,91D2因为你们而感动!

  附上活动奖励与所有作品的链接:

【活动奖励】
  第一名:20ist+bbs5000ist勋章一枚(名字SC来定)好评度 10威望3 (一名)            
  第二名:12ist+bbs2000ist好评度 5威望2(二名)                                      
  第三名:6ist+bbs1000ist  好评度2 威望1(三名)              
  优胜奖:2ist+bbs500ist    (八名)

  最佳评委奖(一名):2ist
  最佳点评奖(一名):2ist
  竞猜幸运奖(一名):2ist  
  作品链接:
  http://bbs.91d2.cn/read-ht...


关于奖品发放:
1、获奖的朋友可以于每日19:30--22:00论坛PM我或者有我QQ的可以QQ联系我(对不住大家了,平时上班上不了游戏,晚上到家要到19:30了,给您造成的不便,敬请谅解) ;

2、告知交易的国度,房间 (要麻烦大家建n的时候用普通房间),并在领取完奖品后跟帖确认;
    例:  媳妇  确认已经领奖

3、如果获奖的朋友上游戏的时间跟我有冲突,也可以PM我空白的ACC,我会把奖品发放到您的账号里,也请发放完毕后查收确认;

内个..bbsist、威望、好评、勋章,请等待管理层发放
不指定 2009/07/14 20:37
数周前《暗黑破坏神2》已确定下个补丁也是最后一个补丁为V1.13版,同时Blizzard也表示确切的发布更新日期尚未公布,现今依然处于收集玩家建议、意见的阶段。今天,Blizzard负责《暗黑破坏神2》及《暗黑破坏神3》的社群经理Bashiok透露,V1.13补丁已进入准备测试的阶段,玩家将会在未来数周内能参与测试此次大规模的更新计划。

  Bashiok表示,虽然他们对本次的V1.13充满信心,但是还不能确切的公布出更新日期。令人振奋的是,这次因为有许多功能系统类型的变化,所以在放出本次更新补丁之前,将会采取先进行测试后公开发布的方式,玩家将可在未来数周内参与测试。他还表示,在未来数周内,玩家将能得知更多关于本次V1.13补丁的情报。

不指定 2009/07/14 20:29
介绍

XCache是一种新兴的php缓存器,经过本人测试,在Windows下效果比同类软件强很多。

实际测试效果如下(非科学方法):
原网页平均执行时间: 0.13 秒
加速后网页平均执行时间: 0.03秒
原CPU占用率: 15% - 60%
加速后CPU占用率: 3% - 30%

可以看出,使用这个加速器可以很大程度的降低CPU占用(但会造成更多的内存占用),并使网页执行时间缩短。具体原理不介绍了,网上有很多。

由于其他同类软件对Windows的支持不够好,所以选用XCache。

网上很多说明都不够详细,所以给大家写一篇。


安装与配置

首先下载XCache,网址为:
http://xcache.lighttpd.net...
需要下载跟你php版本匹配的binaries for Windows(怎么跟我名字一样……)。

下载后解压,把php_xcache.dll放在php.ini中指定extension_dir中。

下面开始配置,打开php.ini。

添加
zend_extension_ts = "($extension_dir)\php_xcache.dll"

(为什么不用extension,一会再说)

添加

[xcache.admin]
xcache.admin.enable_auth = Off
xcache.admin.user = "binarie"
xcache.admin.pass = "1234"
[xcache]
xcache.shm_scheme = "mmap"
xcache.size = 64M
xcache.count = 4
xcache.slots = 64K
xcache.ttl = 1800
xcache.gc_interval = 1800
xcache.var_size = 8M
xcache.var_count = 4
xcache.var_slots = 64K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.test = Off
xcache.readonly_protection = Off
xcache.mmap_path = "xcache"
xcache.coredump_directory = ""
xcache.cacher = On
xcache.stat = Off
xcache.optimizer = Off
[xcache.coverager]
xcache.coverager = Off
xcache.coveragedump_directory = ""

需要修改的值已经用蓝色标出,说明如下:
xcache.admin.enable_auth  XCache后台是否需要验证(这个后台在刚才下载的XCache的admin目录中,可以自由处理)
xcache.admin.user XCache后台登陆用户名
xcache.admin.pass XCache后台登陆密码
xcache.size   XCache的内存缓存大小,普通网站建议设置为64MB,如果是IDC服务器,可以设置成256MB
xcache.count  设置为CPU的数量(双核算2个,比如我的是两个双核Xeon 3.0,就设置为4)
xcache.var_size
xcache.var_count  跟上两条一样
xcache.mmap_path  共享内存标识名,尽量用xcache,避免跟其它软件冲突
xcache.optimizer  优化器,如果没安装Zend可以开启。

至此配置完毕,重新启动IIS即可。

至于为什么不用extension,而用zend_extension_ts,
因为这个发行版的xcache的接口是ZEND_API,直接用extension无法初始化。


疑难解答

1、phpinfo()中显示没有加载php_xcache.dll
   检查php_xcache.dll的NTFS权限是否正确,需要给网站用户(或者可以用Guests)只读权限。

2、出现php内存错误
   使用了extension调用php_xcache.dll,请尝试使用zend_extension_ts。

3、打开网页没有响应,出现错误 Fatal error: [Zend Optimizer] Zend Optimizer *** is incompatible with XCache 1.2.2
   这是因为安装了Zend导致,解决方法很简单,把调用php_xcache.dll的zend_extension_ts提到调用zend的前面。如:
    zend_extension_manager.optimizer_ts="C:\Program Files\Zend\ZendOptimizer-3.3.0\lib\Optimizer-3.3.0"
    zend_extension_ts="C:\php\ext\php_xcache.dll"
    zend_extension_ts="C:\Program Files\Zend\ZendOptimizer-3.3.0\lib\ZendExtensionManager.dll"

不指定 2009/07/14 20:23
宣传了很久的91D2第二赛季第一届9LV PK大赛终于要揭开神秘的面纱了,大家准备好了吗?那就让我们开始吧,尽情享受7月的激情派对~~
针对此次比赛,我们建了一个QQ群,请有兴趣的玩家、选手、裁判、记者们加群,群号:90953638

战网活动区:

1、91D2第2赛季第1届9LV PK大赛报名帖(PVP组)

2、91D2第2赛季第1届9LV PK大赛报名帖(TVT组)

3、91D2第2赛季第1届9LV PK大赛裁判、记者招募贴

物品拍卖区:

4、91D2第2赛季第1届9LV PK大赛冠名权拍卖贴

PVP专区:

5、91D2第2赛季第1届9LV PK大赛宣传贴(包括规则、赛制、奖励等信息,想了解详细情况来这里)

6、关于91D2第2赛季第1届9LV PK大赛某些情况的说明

战队/部落综合管理区:

7、91D2第2赛季第1届9LV PK大赛 战队区总动员

此贴很重要,烦劳综合区提前、加亮,多谢了!
另外我们在主贴重申一下:报名时限是7月5日至7月16日,

为了平衡元素与实体职业之间的抗性差距,我们的比赛场地将选择在地狱级游戏举行,更方便大家使用元素系职业进行比赛
不指定 2009/07/14 20:22
XNova 是战略性宇宙空间模拟游戏,成千上万的玩家同时在线一起进行战争。你只需要一个网页浏览器就可以进行游戏。

地址:http://xnova.91d2.cn/

目前尚未开通BBS账号支持,需要申请账号进入游戏。

游戏正在测试期,欢迎到http://bbs.91d2.cn/反馈问题。

祝大家游戏愉快。
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]