(更新中)
最近要做一个web上的ssh小工具,可是头疼了好久,终于找到了一款开源的小工具。
前台使用javascript收集用户的输入,并每100ms向服务器发送一次请求来更新页面。
function init(): 本函数是客户端的初始化方法,
工作: 1. 页面的构造
2. 按键事件的处理(document.οnkeypress=keypress; document.οnkeydοwn=keydown;)
3. 启动update的定时器(window.setTimeout(update,100);)
function keypress(ev):当用户按下某一个键时,获取健码值,并使用String.fromCharCode 把健码值转换成字符串类型。使用
escape对所有的按键进行编码转换,供http请求使用,并保存到本地的一个数组中,并在页面刷新时把
所有的按键都发送到服务器端。
function keydown(ev): 在ie浏览器中,比如pageup,pagedown,Home,End, 上,下, 左,右这样的控制键使用keypress
是无法获取的,所以要在keydown中进行捕获,并调用keypress方法完成按键处理。
function update():这个可以说是客服端的核心方法了,基本上主要的操作都是在这个方法中完成的。
处理流程大体为:
1. 设置发送标志位为1
2. 当前按键缓存数组中是否有记录,如果有记录,不把所有的按键从数组中拿出来;如果没有就忽略。
3. 构造ajax请求,使用get方式,主要的参数有,s(标识当前使用的是哪一个console,随机生成的);w(console
的宽度);h(console的高度); k(按键的序列)
4. 发送请求,并等待返回。
5. 如果返回中包含新的数据if(de.tagName=="pre") ,就使用Sarissa.updateContentFromNode 方法对返回
的xml数据进行序列化,更新当前页面。并重新设置定时器,window.setTimeout(update,100);
如果返回中没有新数据,就把定时器的时间延长,rmax*=2; 降低请求的频率,减小服务器的压力。
后台使用perl完成,建立一个http服务器,监听一个端口8022,当用户的请求是以u结尾的话,就会对请求进行截取,使用自己的python来完成。并把信息都返回给客户端。由浏览器完成显示功能。