从技术的角度看,QQ和360都用到了一种技术——可以从服务器发出指令让客户端做服务器希望做的事情。那么指令是什么形式呢?
1、可以是二进制,例如
struct remote_code{
long code;
char param[100];
};
在客户端,收到这个结构体后,switch(code),分支执行相关操作即可。
2、可以是脚本代码,例如LUA之类的。用Java以来jvm,而且臃肿,估计很少人用。也可以用JavaScript。
我还在用qq2009, 大家可以看看群中的右上角:
记得09年初下载的时候,此处的样子可不是这样的。没有那么功能,左右slide的更不可能。那么,它是怎样产生的呢?我可以肯定,一定是QQ服务器传来的指令产生的!
我把这种客户端称之为动态客户端。动态客户端,简而言之是一种从服务器下载指令(二进制或者脚本)生成界面,并响应操作完成业务的客户端。它很像浏览器,浏览器是动态客户端的一个极端。
动态客户端的好处多多,引无数英雄竞折腰,QQ,盛大圈圈,等等。动态客户端可以是“现在部署未来”的一种投资。
要设计一套动态客户端,要从以下方面着手:
一、动态些什么。
就是说,服务器发过来的指令集究竟有多少。其中有多少是做界面产生的,有多少是响应操作的。指令集的多寡,决定了以后可以扩展什么。一种极端是,用脚本调用任何WinAPI,或者其他形式的动态链接库。(我已经做出来了,嘻嘻 )
二、客户端Exe部分可以为上述指令集做什么样的支撑。
支撑某个业务的入口,支撑参数设置(例如颜色,服务器地址等)。可以理解为,向上述指令集开放什么样的API。主要来自Exe本身做成函数指针形式的函数入口。这些函数可以做什么?这些函数的参数来自服务器,还是通过指令集运算所得?支持指令集运算结果作为参数是一个质的飞跃,与不支持这个特性的客户端有着本质区别。因为,支持运算,尤其是支持逻辑判断的运算,则可以把逻辑做到脚本中去,服务器送去的指令可以做无限多的事情。
三、指令送达的时机。
这个也很重要,是客户自己请求,还是类似于升级提示一样有个明显的、让用户看得到下载过程的,抑或“暗地里”稍稍完成?
动态,给开发者n多暇想~~~~~