VNC在windows操作系统下,Web中的应用方案

最近在研究VNC相关资料,首先认识一下什么是VNC:

VNC (Virtual Network Computer)是 虚拟网络 计算机的缩写。它 是一款优秀的 远程控制 工具软件,VNC基本上是由两部分组成:一部分是客户端的应用程序(vncviewer);另外一部分是服务器端的应用程序(vncserver)。VNC的基本运行原理和一些Windows下的远程控制软件很相像,
VNC(Virtual Network Computing)是基于RFB(Remote Frame Buffer)协议进行通信的,是一个基于平台无关的简单显示协议的超级瘦客户系统。

——以上引自百度和CSDN博客(http://blog.csdn.net/forever_feng/article/details/4703088)。

常用的开源免费VNC软件,有tightVNC,tigerVNC等等。其中使用较多,比较稳定的是tightVNC,tigerVNC则是基于tightVNC开发的。

首先我们安装tightVNC,体验一下VNC到底是怎样的。tightVNC的官网是:http://www.tightvnc.com/,并且代码已经开源到Github。
下载安装包后,直接安装就可以了。
安装过后,需要在一台机器上启动tightVNC server,然后另外一台机器启动tightVNC viewer,之后tightVNC viewer中配置tightVNC server的ip和端口后,进行连接即可(如果server端配置了密码,那么请输入对应的密码)。(如果连接不上,请检查一下防火墙,是不是端口被墙了)

如果想从windows系统VNC到linux系统,那么需要在linux系统中安装VNC server,有的linux系统已经自带了VNC server。linux安装VNC server后,请注意修改防火墙配置,要把VNC server监听的端口放到例外中。之后使用 tightVNC viewer即可连接到linux的VNC server。
(此处无截图,因为centOS的主机被我玩坏了。。。之前用来实验的centOS还可以用,今天早上来,远程不上去了,Xshell也不能用了,重启之后也无法登录了。。。)


上面讲的都是如何通过客户端连接服务端,如果想要通过浏览器进行访问,该如何实现呢?
浏览器不支持VNC,所以直接连接VNC是不行的,但是可以使用代理,将VNC通过代理,转为Websocket,这样通过浏览器与代理之间建立一个长连接,应用html5的canvas,来实现浏览器上的VNC。

有关VNC到Websocket的代理,常用的有noVNC和guacamole,其中noVNC较为轻量,所以使用noVNC来进行代理。
noVNC的git地址:https://github.com/kanaka/noVNC 作者主要进行开发的是linux下的python版本,尝试使用最新版的0.6.1,但是在centOS上面无法启动(当时还尝试去调试运行时出现的错误,出现的错误完全不明所以),

于是使用0.5.1版本。启动命令就是官网所说的:./utils/launch.sh --vnc localhost:5901。之后记得在本地启动VNC server,并配置其监听5901端口,还要配置访问密码(因为github上面的这个版本noVNC不支持无密码访问,听说有支持无密码的,有找到并实验可用的,请回帖,感谢!)。之后按照github上面的描述,用浏览器访问 http://{centosIP}:6080/vnc.html 登录就可以了。

到这里,已经可以在linux上面,依赖python将noVNC启动了,但是现在存在两个主要问题:1.无法在windows上面使用noVNC;2.一个noVNC服务只能监听一个机器的VNC server。
如果真的存在很多虚拟机需要监听,也不能1:1配置这么多centos。另外一方面,如果支持一个noVNC服务监听多个VNC server,需要考虑并发压力,这个时候需要用nginx进行负载均衡,参见:https://github.com/kanaka/noVNC/wiki/Proxying-with-nginx(这个负载均衡特殊的地方在于,他转发的是websocket,nginx是从1.3版本之后开始支持websocket转发的(Nginx通过在客户端和后端服务器之间建立隧道来支持WebSockets通信(引自 http://blog.csdn.net/chszs/article/details/26369257)))。

考虑到这些问题,其中一个好的方法是,在每一台开启了VNC server的主机上启动一个noVNC。但是,centOS可以部署noVNC,windows却不能,因为一运行它就报错,而且作者的确没有说怎么在windows上面运行noVNC。之后在网上进行不断的查找之后,找到一个noVNC for windows 版本,可以正常运行,但是,不支持多台机器一同访问VNC server,一台通过浏览器登录上去,其他的就是一直阻塞中。。。阻塞中。。。

noVNC到此已经无法在windows上完美满足要求了,只能寻找替代方案—— guacamole,但是guacamole也是在linux上面跑的。之后在github上阅读了noVNC的utils/launch.sh的代码,发现他实际最主要职责的就是去调用websockify,websockify才是代理实现的核心,其github地址为:https://github.com/kanaka/websockify。如果websockify能够在windows上面运行,那就可以了。但是,websockify的python版本也不能在windows上面运行,于是又去调试websockify的代码了,其中python代码中调用的一个信号量在windows中没有,所以报错。之后看作者wiki中写道websockify有C版本,JS版本,ruby(这个真没找到)。所以就用JS版本试试,js版本在websockify-0.8.0\other\js下面,需要使用node.js来支持运行。使用npm install安装所需包后,使用node启动js版本的websockify:node websockify --web C:\XXX\noVNC-0.6.1 6080 172.18.48.157:5900,然后启动 VNC server,使用浏览器访问 http://172.18.48.157:6080/vnc.html ,输入密码登录,可以运行完美。
再新开启一个窗口,也可以支持多用户同时访问,所以JS版本对windows支持是最全面的。


到此,VNC在web中的使用便完成了。

通过浏览器去进行VNC,可以免去各个客户机安装专用VNC client的烦恼,灵活性和支持性都变得更好。另一方面,通过将VNC放入浏览器,结合html5,可以开发出更多更具特色的web系统。













  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值