在做LOL竞技场项目(项目总结)的时候,发现WEB页面可以直接调用客户端里面的接口和数据,这使我很好奇,决心花点时间再研究下这个实现的大致原理,拓展一下思路和知识面,也为后续这种内嵌客户端的项目开发积累经验,然后在得到多位大牛的帮助下,最后才有了这篇浅显的分析,希望能抛砖引玉,如果你了解得更深入,也可以消息我,一起探讨。

  初探:入口

  首先我们来看下,在我做的页面里调用客户端接口的代码:

  首先是请求接口

100242adg7lpo7xlkaxpgl.png
  实际上,通过 lol-home-data 消息,我们可以得到客户端启动的http webserver的地址和端口,后面所有的资源访问都是通过这个地址,通过端口50992,我们可以确定,LeagueClient进程负责启动这个webserver,实际上通过下图中assetUrls里面的url信息,我们可以推断出,这个webserver就是把整个plugins目录当做了跟目录,然后CEF承载前端fe插件的加载访问也是通过这个webserver使用https的协议,而不是特殊的本地文件处理,完全符合web的规范。这样前端插件就真的跟web开发一摸一样了。只是多了riot提供的更丰富的API接口而已。

100243wbdvbermtptgrm99.jpg
  然后我试着直接在chrome里访问对应的资源,发现需要权限验证,在客户端里访问应该是种了带权限的cookie或者token,所以能直接通过,而外面是无法访问到的。

1002433y0tyuzd0gz3vu84.jpg
  总结

  通过这个分析,对于LCU的客户端架构有了大致的了解(前端部分),也算是拓展了自己的思路,近3年,随着node的发展,其实对于前端开发来说,对于客户端的实现方案还是挺多选择的,这里使用了CEF实现的方式,这里瞎扯淡一下:是否可以改为node+webkit的nwjs架构,或者基于Atom编辑器实现的electron框架,这个可以纯前端开发实现,也可以支持插件化或者模块化开发,是不是别这里的CEF更简单呢?当然任何一个架构都是在历史架构基础之上演化而来,而离开历史框架谈架构意义不大。

via:Gad

锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛