魔兽 3.3的改动

3.3.3版本中将加入的天界战马坐骑

PvP、战场和副本


■ 魔兽世界服务器更新程序3.3.3

PvP

荣誉击杀所给予之荣誉点数提高100%,不论等级。由于荣誉点数的奖励是根据荣誉击杀量换算得之,此项改变会使得荣誉击杀和完成战场和冬握湖目标后奖励的荣誉点数变为两倍。不过完成战场目标获得的经验点数和完成冬握湖任务的荣誉点数仍维持不变。

战场

新增随机战场系统!这类似地城搜寻器的随机地城系统,玩家现在可以藉此加入随机战场队列之中。

在PvP框架中的战场页面里头,可以找到随机战场选项,目前只有80级角色能使用此功能。

选择后,玩家无法同时加入特定战场和随机战场之队列中。

就像随机地城系统一样,直到进入战场以前,玩家无法得知他们排进哪个战场的队列中。

随机战场系统最多只能让一队五名玩家同时排入队列。

使用随机战场系统将会给予玩家额外的奖励。

每天获胜的第一个随机战场将会给予玩家相当于30次荣誉击杀的荣誉通货以及25点竞技场点数。

每天获胜第一个之后的随机战场将会给予玩家相当于15次荣誉击杀的荣誉通货。

落败的随机战场将会给予玩家相当于5次荣誉击杀的荣誉通货。

将会移除每日战场任务,并以随机战场系统取代之。

战场不再给予荣誉奖章。

身上有荣誉奖章的玩家,仍可缴交奖章完成各自阵营的任务。

原本需要以荣誉奖章兑换的物品,将会调整其兑换价格以符合移除的要求条件。

当战场节日启动时,将会统一称为「战斗的号角」。此外,战斗的号角荣誉奖励已变更。

选择处于战场节日状态的特定战场时,可获得和使用随机战场系统同样的奖励。

每天获胜的第一个战斗的号角战场可以给予玩家相当于30次荣誉击杀的荣誉通货以及25点竞技场点数。

每天获胜第一个之后的战斗的号角战场将会给予玩家相当于15次荣誉击杀的荣誉通货。

落败的战斗的号角战场将会给予玩家相当于5次荣誉击杀的荣誉通货。

在使用随机战场系统时,如果排定之战场为战斗的号角战场,玩家无法获得额外奖励。此外,每天的第一场胜场奖励无法领取超过一次,不论该战场属于随机战场或是战斗的号角战场与否。

冬握湖

现在只有在同一阵营在占领冬握堡垒后连续防卫成功两次后,内部平衡系统才会改变,原本只需一次。可参阅我们的PvP论坛 http://forums.worldofwarcraft.com/thread.html?topicId=23329393344 以了解更多信息。

地城与团队

斯坦索姆的抉择

玩家现在可以跳过开头的介绍对话部份了,只要玩家至少有完成该副本一次以上的经验。

冰冠城塞

血腥女王菈娜萨尔:暗殒契印现在造成伤害的频率提高为两倍,但是单次伤害降为一半。这项改变将会使得针对此法术的跑位反应更加灵活。

地狱吼的战歌和乌瑞恩之力现在可使玩家宠物获得的生命值及伤害加成,还有真言术:盾雕纹及崇圣护盾的伤害吸收效果。

世界事件首领

玩家可以透过地城搜寻器加入节庆首领(像是火焰节庆的艾胡恩)队伍的队列中。

玩家必须透过地城搜寻器或是和世界中的特殊节庆非玩家角色交谈才能加入这些首领队伍的队列中。

一旦接受任何节庆首领的配对,该队伍会直接传入和该首领对抗的重点区域。

先前关于节庆首领的召唤条件已经移除。如果对那些掉落物品有兴趣的话,玩家可以一直重复加入每一个世界事件首领的队列之中。

在节日主题掉落物品中有机会发现任何稀有节庆物品(像是无头骑士缰绳),队伍中的每名玩家每天只能拾取这些贵重物品一次,就像随机地城的每日任务在每天第一次完成的时候会提供特定奖励一样。

职业:死亡骑士/德鲁伊/猎人/法师


■ 职业:死亡骑士、德鲁伊、猎人、法师

数种团队增益效果的范围由45码延长至100码,避免玩家反复离开又进入这些增益效果范围内,以及避免玩家在需要高度跑位的场合下离开有效范围。有些原本便刻意将有效范围设定得比较短的增益效果则维持不变,例如圣骑士光环、图腾、怒吼、或血之契印。

死亡骑士

冰结之触:此技能在死亡骑士处于冰霜领域的状态下可造成极高的威胁值。

冰炼术:此技能现在可在目标身上附加冰霜热疫效果。

冰剃符文:冰霜易伤效果的堆栈从每次1%、最多堆栈10次,变成每次2%、最多堆栈5次,同时发动机率变成100%。

天赋

血魄

凶恶之力:此效果从触发改为被动。等级1为5%攻击强度,等级2则为10%攻击强度。自身力量增益效果则维持不变。

亡域意志:效果发动冷却时间移除。此外,此技能同时可被少于你5%生命力的伤害所触发。

冰霜

无尽凛冬:不再使冰炼术附加冰霜热疫效果,而是提供2/4%力量。

冰结之爪:此天赋提供的自身加速效果不再与其它近战加速效果相迭加。在冰霜热疫附加上去之后,现在可使死亡骑士的近战攻速提高4/6/12/16/20%。风怒图腾和强化冰结之触的队伍/团队加速效果无法迭加。

强化冰结之爪:此效果从触发改为被动。自身加速增益效果仍维持不变。

冷钢沉着:提高副手伤害,从5/10/15%提高为8/16/25%。

无毁坚甲:力量增益效果从10%提高至20%。

秽邪

天谴打击:死亡骑士在该目标身上的每一个疾病效果皆可造成70%武器伤害,加上相当于12%物理伤害的暗影伤害。在没有疾病时的伤害值应比修改前大,不过所有疾病效果附加上去之后的总伤害值应不变。

秽邪荒疫:除了原有效果外,现在此天赋可同时避免目标身上因秽邪荒疫所感染的疾病效果被驱散。

德鲁伊

自然之握:有效次数从1次增加为3次。

天赋

平衡

星殒术:此法术造成的伤害大幅提高。

台风:法力消耗从32%减少至25%。

野性战斗

割碎:此天赋的减益效果持续时间从12秒增加至60秒。

猎人

天赋

野兽控制

凶性鼓舞:此技能现在为光环效果,提高100码内所有队伍或团队成员之伤害1/2/3%,同时使稳固射击造成的伤害提高3/6/9%。

法师

寒冰箭:此法术之法术能量增幅提高了大约5%左右。

天赋

秘法

秘法活化:此效果从致命一击触发改为被动。自身伤害增益效果仍维持不变。

咒法移转:此天赋现在只会在法力护盾、防护冰霜结界、防护火焰结界、以及寒冰护体吸收伤害时赋予额外法术能量。法术能量增益效果最高不得超过法师生命力上限5%的限制已经移除。

火焰

燃烧之魂:降低威胁值由5/10%提高至10/20%。

燃火:此法术之冷却时间从3分钟减少至2分钟。

强力火焰:炎爆术造成的伤害现在也受此天赋影响。

折磨弱者:炎爆术造成的伤害现在也受此天赋影响。

冰霜

大脑冻结:此天赋现在可使你的下发火球术或是霜火箭变成瞬发法术,且不需消耗法力。这其中加入小小的冷却时间,避免再次触发大脑冻结后立刻使用霜火箭。

职业:牧师/潜行者/萨满祭司/术士/战士


■ 职业:牧师、潜行者、萨满祭司、术士、战士

牧师

天赋

戒律

崭新希望:持续时间由20秒提高至60秒,但是同时具有20秒冷却时间。

盗贼

割裂:此技能之持续性伤害现在可造成致命一击。

天赋

敏锐

下流诡计:使偷天换日、扰乱和暗影闪现的冷却时间降低5/10秒以及能量消耗降低5/10点,使准备的冷却时间降低1.5/3分钟。

鬼魅攻击:如果盗贼手上装备了匕首,此技能可造成180%武器伤害,而不是125%。

出血:如果盗贼手上装备了匕首,此技能可造成160%武器伤害,而不是110%。

锯刃:此天赋现在可使盗贼无视目标的护甲3/6/9%,而不再是根据盗贼等级所提供的固定值。

暗影抹杀:除了原有效果外,另外增加所有伤害1/2/3/4/5%,同时减少的背刺和伏击能量消耗从3/6/9/12/15点提高至4/8/12/16/20点。

埋伏:现在除了伏击外,背刺也可触发此天赋的减益效果,从只能由技能致命一击触发改为每次使用皆可触发,但是缓速效果从70%减少至50%。

萨满

烈焰震击:此技能之持续性伤害现在可造成致命一击,同时受法术加速所影响。

天赋

元素战斗

元素之誓:此技能现在会以被动光环的方式存在。

增强

怒不可抑:此技能现在会以被动光环的方式存在。

术士

献祭:此技能之持续性伤害现在可造成致命一击。

生命分流:此法术之转化值不再受精神影响,现在会因法术能量而提高。

天赋

恶魔学识

恶魔契印:此效果的持续时间由12秒提高至45秒,同时具有20秒冷却时间。

战士

复仇:由此技能所造成之伤害(基本值和增幅加成结果)提高50%。

天赋

武器

创伤:此天赋造成的减益效果持续时间从15秒增加至60秒。

狂怒

暴怒:此效果由致命一击触发改为被动。

防护

强化复仇:此天赋无法再触发昏迷效果,而是使其可以额外对一名目标造成50/100%的复仇技能伤害。

活力:总耐力之提高现在从2/4/6%增加至3/6/9%,对总力量和熟练技能的提升效果不变。

物品和商业技能


■ 物品和商业技能

物品

有名的弗罗佐已经搬进达拉然的魔导师贸易区,让你用冰冻宝珠交换其它交易物品。

雕纹

死亡骑士

疫病雕纹:当此雕纹重置冰霜热疫效果时,同时也会重置冰结之爪效果。

德鲁伊

割碎雕纹:此雕纹效果现在从延长减益效果持续时间改为提高割碎伤害10%。

法师

火球术雕纹:不再提高火球术的致命一击机率,相对的,现在会降低火球术施法时间0.15秒。

机械陆行鸟:现在召唤任何此类型坐骑时,会听到棒呆了的机械声响!

牧师T10治疗套装四件加成:经过重新设计,此效果现可提高施法者的真言术:盾和恢复效果5%。

萨满T10元素套装四件加成:此效果因为烈焰震击周期伤害现在受加速影响之故,因此略为调整。此加成效果现在可使萨满的熔岩爆发延长施放在目标身上的烈焰震击周期性伤害,在结束前至少可额外延长2次。

专业技能

符文宝珠:略为降低以此物品为原料之配方材料需求。

工程学

非战斗宠物炸弹宠物和发条娃娃不再是拾取后绑定。

钓鱼

钓鱼每日任务「胃袋大肚鱼」稍微做了些改变,现在只要在达拉然的紫罗兰堡外面垂钓即可。此任务仍然需要断裂的手臂,同时更名为「少了只胳膊!」

铭文学

大多数需要两种墨水的配方现在仅需一种即可。

挖矿

泰坦锻钢锭:制作此物品后不再有冷却时间限制。

裁缝

冰川包:制作此物品后会有7天冷却时间。

移除月幕布、法纹布、及黯纹布的冷却时间和地点限制。

任务

为许多任务之载具器械进行升级,以带来更多乐趣。

用户接口

所有浮动式警告讯息换上了全新的警告图示。

拍卖行/随机组队系统/目标追踪


■ 用户界面功能:拍卖行、随机组队系统、目标追踪

拍卖行

如果某服务器的拍卖场因为任何原因无法使用,尝试使用该拍卖场的玩家会收到一个警告讯息。

玩家现在可以右键点击的方式在拍卖场放置物品。

可以在拍卖场放置好几组单一特定类型的物品,另外增加数种功能选项,可选择如何条列显示拍卖物品。

堆叠量:如果在拍卖框架中加入1迭物品,玩家可以选择他们想要贩卖的组数量。如果玩家输入的堆叠量无效(例如1组21颗的萨钢矿石),开始拍卖按钮会显示为灰色。

堆叠数:此外,还可以选择堆叠数,玩家能选择他们想要贩卖多少组某物品(比如说,如果一名玩家在拍卖框架中放置了共43颗萨钢矿石,矿石可以分成2组20颗、4组10颗、8组5颗、43组1颗…诸如此类。如果数量和组数分配完毕后还有余数,剩下的物品会自动放置在该玩家的背包之中)。

堆叠量和堆叠数会以数学算式连结,因此其中之一产生变化时,会自动计算出另一数值的量(例如,如果玩家在拍卖框架中放置了43颗萨钢矿石、堆叠量字段为20,堆叠数字段会根据默认值自动变成2。如果玩家只希望贩卖20颗萨钢矿石,堆叠数字段可以手动更改成1)。

价格:玩家现在可以输入某物品每一叠或是每一个的价格,只要从下拉式选单选择即可。如果选择为每一个的价格,而玩家贩卖的是一整组物品,拍卖场会自动将该组中的每个物品分开,并标上玩家输入的单一物品价格。如果选择的是每一组,玩家可以输入所希望收取的单组物品价格。

拍卖布告完成条:如果某玩家一次拍卖好几种不同、或是好几组的物品,会出现一个布告完成条,显示该次按下开始拍卖后、每项个别物品放置陈列的总进程,单次「开始拍卖」中的个别陈列数量越大,所需要的时间也就越长。玩家在这个过程中还是可以浏览拍卖物品,不过玩家一移动便会中断这个过程,就像是以急救技能制作复数绷带时玩家移动会产生的那种情况。就像在制作绷带一样,完成拍卖程序要比移动角色来得重要,先停止其它活动好完成陈列程序。

地城搜寻器

透过随机地城系统进入、然后突然离开地城而在该玩家身上出现的逃亡者减益效果,其持续时间由15分钟提高为30分钟。随机地城系统的冷却时间仍旧为15分钟。

随机地城冷却时间不再以减益效果的方式显示。在下拉式选单中选择随机地城或是随机英雄地城时,玩家将会看到剩余冷却时间显示在地城搜寻器窗口上。

如果你队伍中的玩家身上有逃亡者减益效果,该角色名称在地城搜寻器窗口将会显示「冷却中」,避免此队伍加入队列之中。

现在玩家在地城队伍中可以重新让他们的队伍加入地城搜寻器的队列之中,不过仍得迅速决定各自的角色类型。

使用移除表决的玩家必须迅速提出移除队伍成员的理由。该理由必须让除了移除对象以外的所有队伍成员知悉。

随机地城等级要求将会以更宽大的等级要求取代之,好让不同等级的玩家能在更多副本一起进行游戏。

透过地城搜寻器随机组成的队伍,将会以下列顺序在队伍接口上排列呈现:坦克、治疗者、伤害输出、伤害输出、伤害输出。

如果透过地城搜寻器随机组成的队伍中,有玩家无法需求某物品,现在会告知其原因。

验证器框架:如果玩家账号有和 Battle.net 验证器绑定,并且在登入窗口选择了「记住账号」,下次该玩家登入《魔兽世界》时,会在密码栏下方出现一个字段让玩家输入验证码。

世界地图多了一个选项,可显示由复数层别组成的地城、区域、或是城市之不同层别(例如,玩家不需要亲自跑到达拉然下水道,也可以查看下水道地图)。

任务追踪功能

现在可以透过接口功能选单放大任务目标追踪框架。

在任务面板的地图,可在追踪任务上看到简短的叙述文字。

在玩家背包的任务触发物品图标上可以看见惊叹号,这会使得这些物品更容易辨识。

如果玩家开启追踪低等级任务,地图上的任务目标不再会是黯淡不明的了,在迷你地图或非玩家角色头上的惊叹号也一样不会呈现黯淡不明的状态。

目标框架

目标框架现在可在上方列出显示的任务数量。此外,玩家可以点击目标框架上方的「目标」这个字开启列表过滤选项,决定要怎样排序任务。任何以此方式排序过滤的任务或成就仍在追踪列表中,只是被隐藏起来而已。

排序

从困难的任务开始排序。

从简单的任务开始排序。

从最接近玩家所在位置的任务开始排序(这会在玩家四处移动时自动进行更新)。

手动排序:玩家可以右键点击目标框架中的每个任务来决定排列顺序。

过滤

开启或关闭成就追踪。

开启或关闭已完成的任务追踪。

开启或关闭其它区域的任务目标追踪。

玩家现在可以 Shift 点击任务目标或是勾选地图上的追踪任务对目标框架中的任务进行追踪。

成就和错误修正


■ 成就和错误修正

成就

在巫妖王之怒上市之前符合「撒塔斯的英雄」成就条件的玩家将会获得此成就。

奥特兰克山谷:当玩家在征战平原击杀尚未下马敌人时,会正确地给予「病态的蹬羚」的奖励。

技术问题

画面帧数:加入每秒200的画面帧数上限。要关闭画面帧数限制,请在 Config.wtf 文件中加入这一行: SET maxFPS “0”。

Bug修正

当玩家和非玩家角色交谈时,并有两个或两个以上的任务未完成,未完成之任务将会正确地以灰色问号显示在讯息字段中。此外,当非玩家角色可提供复数任务、或是玩家身上具有复数任务仍在进行中或已完成时,重复性任务会正确地以蓝色惊叹号及问号显示。

在自动跟随其他玩家时,将游戏客户端最小化不会再中止跟随指令。

修正造成在团队全灭后,有时巫妖王之战不会重置的问题。

修正石之大厅的布莱恩·铜须在死亡重生后不会正确启动岁月议庭事件的问题。

现在玩家能roll分解他们背包中已经拥有的唯一物品。

冰DK入门

当DK刚满80级的时候,一身蓝绿混合的装备,如何把dps打高是一个头疼的问题

我建议是使用入门级的单病凛风流,大量的魔法伤害不吃装备,冰天赋加成的3%命中又能缓解早期命中不足的问题

冰DK的天赋

详细配点和雕文可以参考 http://wow.178.com/tf/#jfV0mZG0exAbczf0cuzAoc:Tak

大雕文选用:凛风冲击雕文/湮没雕文/冰霜打击雕文,都可以在拍卖行买到

冰DK的武器

冰DK dps一般都是双持,武器有多个选择

1.龙眠联军声望尊敬即可购买两把真相之牙

2.黑锋骑士团声望崇敬买两把暗魂收割者

3.如果你很有钱,可以直接在拍卖行买两个恐怖酒杯

冰DK输出循环

该天赋输出没有固定循环 遵循技能优先级原则。起手式为:凛风冲击+湮灭+血打+铜墙铁壁传染宏+强力符文武器 之后则遵循技能优先级。技能优先级为 湮灭>凛风冲击>冰打

模板1:
凛风冲击+湮灭+血打+铜墙铁壁血打宏+强力符文武器

湮灭+湮灭+湮灭+冰打+冰打+冰打(第三个湮灭触发白霜则替代后头的冰打,前2个中的任意一个湮灭触发白霜则可以插入一个凛风)

模板2:
凛风冲击+冰打+湮灭+血打+血打+冰打+冰打————(第一个凛风冲击如果之前有白霜则改为湮灭,湮灭若触发白霜则使用凛风冲击插入血打之前)

湮灭+湮灭+湮灭+冰打+冰打+冰打————(第三个湮灭触发白霜则替代后头的冰打,前2个中的任意一个湮灭触发白霜则可以插入一个凛风)

单疾病凛风流因只需要维持一个疾病,所以上病主要靠凛风而导致了模板2的第一个凛风有随机性,根据疾病时间自己掌握

之后我们都一直在模板2循环,直到强力符文武器冷却完毕后我们才再次回到模板1

输出优先级可以看这个图…其中5是那个铜墙铁壁宏

铜墙铁壁宏

/cast 活力分流

/cast 你的种族天赋(比如血精灵的奥术分流)

/cast 铜墙铁壁

/cast 鲜血打击

开始出征

在这个阶段,你已经可以参加英雄试练和各种英雄级副本了,因为你的DPS已经不那么难看了

(我用朋友刚满级的帐号,洗点/加雕文/买入两把真相之牙后,DPS秒伤从900==>2000)

而当你的GS达到4000左右,这个天赋就到瓶颈,需要考虑转血或者邪了

冰DK的魔印

警觉魔印 : http://cn.wowarmory.com/item-info.xml?i=40207

当你存有一定的征服牌子,务必第一时间入手该魔印

更多的参考资料:

http://bbs.ngacn.cc/read.php?tid=3690141#l10

Nginx启动初始化过程(转载)

main函数做的第一件事情就是对参数选项进行处理,和普通的Linux程序如出一辙,如下:

if (ngx_get_options(argc, argv) != NGX_OK) { return 1; }

Nginx用此函数对参数选项进行解析,从而采取相应的动作,比如:显示版本、测试配置等功能。其实此函数实现的很简陋,远没有Linux提供的getopt()那么强悍,但却可以达到跨平台的目的。

     ngx_time_init();
#if (NGX_PCRE)
    ngx_regex_init();
#endif
    ngx_pid = ngx_getpid();
    log = ngx_log_init(ngx_prefix);
    if (log == NULL) {
        return 1;
    }

上述几行代码的功能如其名,主要完成Nginx在时间和日志等方面的初始化工作。

    if (ngx_save_argv(&init_cycle, argc, argv) != NGX_OK){
        return 1;
    }

将命令行参数保存到ngx_os_argv、ngx_argc以及ngx_argv这几个全局的变量中。这算是一个备份存储,方便以后master进程做热代码替换之用。

     if (ngx_os_init(log) != NGX_OK) {
        return 1;
    }

完成操作系统的一些信息获取,如内存页面大小、系统限制资源等信息;所有的这些资源都将会被保存在对应的全局变量中,因此后续访问将会很便利。

    if (ngx_crc32_table_init() != NGX_OK) {
        return 1;
    }

初始化一个做循环冗余校验的表,由此可以看出后续的循环冗余校验将采用高效的查表法。crc算法此处就不做分析,网上一堆一堆的相关资料,有兴趣的同学可以了解。

    if (ngx_add_inherited_sockets(&init_cycle) != NGX_OK) {
        return 1;
    }

通过环境变量NGINX完成socket的继承,继承来的socket将会放到init_cycle的listening数组中。在NGINX环境变量中,每个socket中间用冒号或分号隔开。完成继承同时设置全局变量ngx_inherited为1。

    ngx_max_module = 0;
    for (i = 0; ngx_modules[i]; i++) {
        ngx_modules[i]->index = ngx_max_module++;
    }

额!!!这个循环中的ngx_modules数组好像没见定义,难不成是火星来的?当然不是,如其名,这就是一个存储所有模块的信息,包括自己开发的模块都会放到这个数组中,而这个神秘的数组却是在自动编译的时候生成的,位于objs/ngx_modules.c文件中。这个循环的目的是清晰可见的——对所有模块进行索引编号,方便以后访问;同时借助ngx_max_module对所有模块进行了一次点数,确定究竟有多少模块。而神秘数组ngx_modules的长相大概如下:

ngx_module_t *ngx_modules[] = {
    &ngx_core_module,
    &ngx_errlog_module,
    &ngx_conf_module,
    &ngx_events_module,
    &ngx_event_core_module,
    &ngx_epoll_module,
    &ngx_openssl_module,
    &ngx_http_module,
    。。。
};
    cycle = ngx_init_cycle(&init_cycle);

这里将会初始化很多的东东到全局变量cycle中,是Nginx启动初始化的核心之处。ngx_init_cycle函数的过程比较多,放下一篇blog中逐段分析。

    if (ngx_init_signals(cycle->log) != NGX_OK) {
        return 1;
    }

注册一堆信号处理程序,需要注册的信号及相应的信号处理函数被放在一个类型为ngx_signal_t的数组signals中。数组定义在src/os/unix/ngx_process.c中。ngx_signal_t结构类型定义了信号值,信号名字,信号对应动作名以及信号处理函数。

     if (!ngx_inherited && ccf->daemon) {
        if (ngx_daemon(cycle->log) != NGX_OK) {
            return 1;
        }
        ngx_daemonized = 1;
    }

ngx_daemon肯定就是用来实现守护进程的函数了,此处就不多废话了,有需要写server程序的,可以直接copy这段代码实现守护进程。

    if (ngx_create_pidfile(&ccf->pid, cycle->log) != NGX_OK) {
        return 1;
    }

玩过Nginx的人都知道,Nginx启动后有一个记录进程id的文件,这个文件里面就一个pid。原来这个pid就是在这个地方记录下来的。查看ngx_create_pidfile函数可以看到这样的一行代码

if (ngx_process > NGX_PROCESS_MASTER) {
return NGX_OK;
},这行代码就说明了,不是master进程时,就不创建这样的一个pid文件。

    if (ngx_process == NGX_PROCESS_SINGLE) {
        ngx_single_process_cycle(cycle);
    } else {
        ngx_master_process_cycle(cycle);
    }

到此就基本完成Nginx的启动初始化过程了,即将开始进程相关的工作了,这里最重要的ngx_master_process_cycle这个过程,在这个过程里实现了master-worker模式的进程模型,也是生成环境下Nginx的常用模型。既然此处已不再是初始化工作,那么就留到后续分析吧。

上述所有过程都是在main函数里完成的,下一篇分析ngx_init_cycle函数。

From: http://www.tbdata.org/archives/1092

顽皮的小男孩

广岛原子弹事件是指1945年8月6日美国在日本广岛投掷原子弹。1945 年夏,日本败局已定。美国总统杜鲁门和美国政府想尽快迫使日本投降,也想以此抑制苏联,选定日本东京、京都、广岛、长崎、小仓、新潟等城市作为投掷原子弹的备选目标。此前,美国、英国和中国发表了《波茨坦公告》,敦促日本投降。7月28日,日本政府拒绝接受《波茨坦公告》。8月6日和9日美军对日本广岛和长崎投掷原子弹。

章鱼变身记

╭( ▔▽▔)╮变章鱼!

╭( ▔▽▔)╯要开始了~

╰( ≧﹏≦)╯恩……

( ▔◎▔) 喔耶~~厉害吧
╱│││╲

(∥▔◎▔)  喔…
╱│││╲

(∥= ◎ = ) 喔 ,变不回去了…
╱│││╲

Adobe FMS Open File

这边有个需求是替换adobe fms 热点文件的时候防止删除正在访问的文件,保证用户请求不中断

但是发现adobe fms open的文件lsof看不到,但是iostat能证实该磁盘是在读取的,很奇怪

尝试用inotify去捕捉事件,可以发现:

[@dg_80_65 inotify-tools-3.14]# inotifywait -m  \
 --timefmt  '%d/%m/%y %H:%M' --format  '%T %e %w%f'  \
/data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
Setting up watches.
Watches established.
01/11/10 18:37 OPEN /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:37 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:37 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:37 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:37 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:37 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:37 CLOSE_NOWRITE,CLOSE /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:37 OPEN /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:37 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:37 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:37 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:37 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:37 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:37 CLOSE_NOWRITE,CLOSE /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:38 OPEN /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:38 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:38 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:38 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:38 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:38 CLOSE_NOWRITE,CLOSE /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:38 OPEN /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:38 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:38 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:38 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:38 ACCESS /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4
01/11/10 18:38 CLOSE_NOWRITE,CLOSE /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4

所有文件迅速的打开,读取,关闭,所以lsof捕捉不到

adobe的文档是这么说的:

When a stream is requested from the server, segments of the stream are stored in a cache on the server. As long as the cache has not reached capacity, the server places segments in the cache. Each time a stream attempts to access a segment, the server checks the cache. If the segment is available, the server gives the stream a reference to the segment for playback. If the segment is not available, the server retrieves the segment from its source, inserts it into the cache, and returns a reference to that segment to the stream.
When the cache is full, the server removes unused segments, starting with the least recently used. After removing all unused segments, if there still isn’t enough room for a new segment, the server notifies the client that the stream is not available and makes an entry in the core log file.

When a stream is requested from the server, segments of the stream are stored in a cache on the server. As long as the cache has not reached capacity, the server places segments in the cache. Each time a stream attempts to access a segment, the server checks the cache. If the segment is available, the server gives the stream a reference to the segment for playback. If the segment is not available, the server retrieves the segment from its source, inserts it into the cache, and returns a reference to that segment to the stream.
When the cache is full, the server removes unused segments, starting with the least recently used. After removing all unused segments, if there still isn’t enough room for a new segment, the server notifies the client that the stream is not available and makes an entry in the core log file.

大意是说fms是从缓存区取文件的,如果不存在该文件的这一部分,就会从源文件读取,放入缓存区,再给用户

因此,比较可以接受的办法是删除文件之前判断下access time的时间戳

stat -c %X /data/video/ssdcached/stream/20100525/57d4f5a6-fc8d-4f8f-b0f7-c00020f6c7ac.mp4