在QingCloud上搭建基于Socket.io的虚拟计算机
-
前言
基于Socket.io有很多特别强大的应用,socket.io官方提供的一个虚拟计算机Demo就非常赞。通过将使用Qemu虚拟取出来的PC界面转发至Socket.io的端口,然后对Canvas不断地进行绘制,形成了近似与远程操控的体验。我们项目用到了这个库,但由于这个库发布于很久之前,再加上相关文档过少,导致部署起来极为困难。所以我完成了这篇文章,希望能让后来人少走一些弯路。
首先请在青云上申请相关主机,下文基于Ubuntu 14.04 x64,其他系统请自行转换相应命令,谢谢~
环境配置
安装nodejs
使用APT安装
sudo apt-get -y install nodejs-legacy
或使用nvm来管理不同版本的nodejs
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.25.4/install.sh | bash
Canvas库在Debian系的OS上会有些诡异的行为,所以需要格外的做一些处理,感谢@computernewb的回复
sudo ln -s /usr/bin/nodejs /usr/sbin/node
安装依赖
sudo apt-get -y install libcairo2-dev libpango1.0-dev libgif-dev build-essential g++
安装libjpeg9和libjpeg9-dev
wget http://ftp.us.debian.org/debian/pool/main/libj/libjpeg9/libjpeg9_9a-2_amd64.deb dpkg -i libjpeg9_9a-2_amd64.deb wget http://ftp.us.debian.org/debian/pool/main/libj/libjpeg9/libjpeg9-dev_9a-2_amd64.deb dpkg -i libjpeg9-dev_9a-2_amd64.deb
处理WinXp镜像
下载XP镜像
下载后使用网盘中转
在I Tell You上下载纯净的XP镜像。(如果使用盗版的镜像,VPS可能会因为违反其Tos而封号)
比如,WinXP的中文简体专业版:ed2k://|file|CN_WINXP_PRO_ISO.img|530186240|7855069CE4216615D761654E2B75A4F7|/
使用sftp上传
可以使用类似于FileZilla这样的FTP工具直接上传,大部分国内的网盘到国外的速度都不理想= =,百度云还会出现断流,而好用的国外网盘都被墙,本身就需要翻墙上传。所以还不如直接使用sftp传到服务器上。
格式转换
I Tell You上下载下来的是img镜像文件,然而我们需要的是ISO,所以还需要进行转换。将img转换为iso,我们需要
ccd2iso
。sudo apt-get install ccd2iso
使用方法:
ccd2iso <.img filename> <.iso filename>
socket.io-computer配置
安装依赖
sudo apt-get -y install qemu redis-server
虚拟机配置
生成一个光盘镜像文件用来加载ISO
qemu-img create -f qcow2 winxp.img 10G
运行
启动Web服务器
node app.js
启动IO服务器
node io.js
生成qemu实例
COMPUTER_ISO=winxp.iso COMPUTER_IMG=winxp.img node qemu.js
启动虚拟机
COMPUTER_IMG=winxp.img node emu-runner.js
运行
访问
http://localhost:5000
注意
若搭建在服务器上,使用IP访问
需要修改
var url = process.env.COMPUTER_IO_URL || 'http://localhost:6001';
为
var url = process.env.COMPUTER_IO_URL || 'http://your IP address:6001';
否则无法正常连接
-
看了socket.io 页面的虚拟计算机,非常酷。
-
@Arron 确实很酷,不过距离实际运用差距还是挺大的,主要是效率太低了= =,Canvas实时绘图
其实对青云的VDI如何实现超感兴趣的,不过那么流弊的大招估计是不会轻易出去的,2333
-
这个东西做即时通讯之类的事情估计会很方便,不过没用过。