日更36/100(Photon 服务器插件)

我们的另一个项目是用Photon实现的网络同步,因为计算全都放在客户端,导致外挂横行。这周我基本上一直在研究从服务器端检测防外挂的方案,这里略作总结。

其实主要在研究如何使用Photon Plugin。这是Photon官方提供的一种服务器扩展的方案。
但是官方的文档很简单,例子也很简陋。很多东西要自己研究。

主要实现方式就是写一个C#工程插件,继承一个类,重载它的回调函数,即可拦截到客户端到服务器的包,然后就可以根据拦截到的包内容,做出放过,丢掉,拒绝等处理方式。
听起来很简单,但实际做的时候,才发现,根据当前包,信息是不足的,必须要缓存上下文信息,拿到足够的信息才能做出正确的判断。
经过研究发现

  1. 基本上所有经过Photon服转发的信息插件都能获得,但不是直接提供给你的,需要从拦截到的包中解析出需要的信息。
  2. 需要花费一些精力,弄清楚每个回调函数会返回哪些信息,它们的格式是什么,如何解析出来。(方法有两个,一是去看客户端PUN的源码,看传输的信息是如何组织起来的;二是在Photon插件端把消息体打印出来,以验证与客户端的结构是否一致
  3. 解析出来的信息要重新组织,并存储起来,以便在需要的时候能获取到。

未解决的问题:
现在如果要更新插件,必须要把Photon服停掉,再替换新的插件。这种方式,如果到线上必然是不行的,需要找到一种可热更的方式。
如果谁有什么想法,欢迎留言交流。

推荐阅读更多精彩内容