--只为证明php是天下上最好的措辞
作为一个魔兽老玩家,最近看着暴雪开了怀旧服,早已寂灭的心又开始躁动不安了,我正式入坑是网易接替九城那会,号称万年TBC, 对付那个时期,用一句话表达便是“我站在狂风城的广场上,听着港口涛声,抱负着诺森德景象多么寒冷…”,你懂的~
那时候刚上大学,对付涉世未深的我来说,魔兽的差点让我变成网瘾少年,直到毕业步入社会,才逐步淡绝了对魔兽的念想,但无论过去多久,那段在网吧通宵鏖战,跟同学朋友在副本、沙场度过无数日子的青春一贯烙印在心底深处,永不磨灭!

好了,废话不多说,开始进入正题
———————————————————————————————————————
大家都知道,php作为一门脚本措辞,对付没什么根本的人来说比较随意马虎上手,但是很难精通,随着互联网的逐步兴起,php也火热起来,在这种需求的催动下,大量职员涌入到php的开拓中来,多年之后,一度让人认为php只能写写网站、脚本、接口,随后而来的便是措辞鄙视链,写汇编措辞的工程师都鄙视写C措辞的工,写C措辞的工程师都鄙视写C++的, C++工程师鄙视写Java的和写C#的, Java工程师和C#工程师则相互鄙视,然而,所有的工程师都鄙视PHP工程师,于是这句著名的自嘲式的“php是天下上最好的措辞”在互联网圈子流传开来~~
SO, 假定“php是天下上最好的措辞”这句话为真,那我们用它来构建一个游戏做事端怎么样?
“真的吗?”
“可以吗”
“真的!
”
“可以!
”
小打小闹的什么页游啊、棋牌啊直接忽略,来个寻衅高的,难度大的!
那就魔兽天下吧!
哈哈哈哈哈哈哈哈哈哈~
但是写游戏做事端我们要做些什么呢,我也不知道,我也不敢问啊,让别人知道你想用php写魔兽天下做事端,会招来各种花式嘲讽的!
于是静静的装了抓包工具,静静的研究起了魔兽天下游戏的逻辑,得出结论,
1魔兽天下做事端须要一个用户登录(authserver)做事器用来处理用户登录鉴权,客户端与做事端利用TCP协议,端口号为3724
2须要一个天下(worldserver)做事器来处理游戏逻辑,包含角色的创建,舆图的加载,npc和生物的构建及各种眼花缭乱的物品和技能等等~同样是TCP协议,这里的端口号为8085
第一步: 用php 构建用户登录做事器-AuthServer
我这里采取Swoole扩展(不知道的自行百度)创建了TCP做事监听了本机的3724端口
用户登录做事器紧张的逻辑是: wow客户端发送账户信息给做事端,做事端验证账户并奉告客户端鉴权结果,结果中包含天下做事器的地址及端口。
偷偷说一句,魔兽的客户端在登录的时候只会发送一些基本信息,并不包含明文密码,而是利用SRP认证
SRP简化后的事理是:
1. 做事器不保存密码或密码的散列值,防止字典攻击, 而只是保存验证因子(verifier)
2. 客户端和做事器可以各自打算出一个会话秘钥(session key),其值相同 防止窃听
第二步 构建天下做事器-WorldServer
与上面一样,须要绑定本机的8085端口
小提示: 3724和8085的TCP/UDP已经被暴雪注册了…大略说,暴雪注册了专有的端口号用于专门的战网通信以及魔兽天下的通信。以前大家(数据包)都从一个门(端口)进进出出,现在暴雪大爷有钱了,弄了个专门的门,往后爷走这个门,你们都不许走。牛逼吧!
魔兽客户端在用户登录做事器鉴权成功后就会连接到天下做事器,首次接入做事端会向客户端发起鉴权数据包,个中带有做事器随机密钥,客户端收到之后根据密钥和sessionkey打算出client_hash,并发送给做事端,做事端利用相同公式打算出server_hash判断是否同等
做事端鉴权完成后的所有数据包都将进行加密
先利用hash_hmac对sessionkey天生指定的哈希运算规则数据,
然后根据数据包的Opcode天生数据包头,然后发送结果给客户端
客户端收到鉴权成功结果后,会发送获取角色信息的数据包,做事端进行处理,获取角色信息并发送给客户端
客户端点击进入魔兽天下后,发送CMSG_PLAYER_LOGIN操作码。做事端吸收并处理
还挺多的~就不一一详细写了
进入魔兽天下后便是这个样子
完全运行视频(Swoole创始人韩天峰的微博): https://weibo.com/tv/v/I7Hu7dVxG?fid=1034:4418354417756012
视频加载中...
到此一个大略的魔兽天下做事器就构建完了! 怎么样? 哈哈哈,php是不是天下上最好的措辞!
不过话说回来,我目前做到的也是一些很根本的东西,毕竟魔兽天下那么大,想要逐一实现靠一个人或一门措辞是不可能的,可以做和不能做完备是两个观点,利用php是比较方便,高效且便捷,但是性能我无法完备担保,不能利用swoole和php7之后,这点就不是我去考虑的了,够用,还可以!
代码我已经开源,地址是:https://github.com/fan3750060/wpcore
感激!
来!
让我们一起说 : php是天下上最好的措辞!