设计思路-在线显示系统

关于

客户端软件通常来说是需要下载到本地, 进行安装之后才能使用的. 但是下载安装对于一个只是想了解一下软件的功能的用户来说, 成本太高了. 这样对于一个好的软件可能会流失一部分潜在用户. 本演示系统就是为了解决这个问题. 他可以让用户在不下载软件的情况在网页中对软件进行试用.

so, 演示系统跟这个百度网盘客户端其实没有什么关联, 是一个可有可无的模块. 那为什么要做这个系统呢? 2点原因, 第一是当这个系统的想法在我脑袋中萌生的时候, 我的感觉是它很酷,做出来的话应该会比较有意思; 第二如前面所说本项目的意义在对golang的实践和应用, 而不在于不限速客户端这个功能本身.

需求分析

最直接的, 页面上需要有一个按钮, 用户点击之后就能够出来一个界面, 里面包括需要演示的软件, 用户通过鼠标键盘操作, 就像在自己本地 操作界面一样. 但是软件是需要运行在系统当中的, 浏览器不是系统环境, 那怎么办, 用js实现一个虚拟机吗? 不可能, 虽然已有在浏览器跑 虚拟机的项目, 但只怕体验比直接下载软件还要差. 虚拟机肯定是需要的不然没法运行软件, 但浏览器又不能跑虚拟机, 那怎么办? 我们把虚拟机运行在远程的电脑上, 虚拟机里装好要演示的软件, 用户点击体验按钮之后, 远程的虚拟机自动开机. 问题来了, 万一在线体验的用户很多, 虚拟机不够用怎么办. 面对狼多肉少的局面我们需要一个排队系统, 如果当前没有空闲的虚拟机 用户就需要排队等待先来的人操作完成之后, 他在操作. 为了防止恶意用户一直霸占虚拟机资源, 我们还需要对每次体验进行最大时长的限制. 那么在排队中的用户就干等着吗? 我想用户没有足够的耐心, 所以可以设计一个围观的功能: 排队中的客户可以点击某个虚拟机的围观按钮, 然后连接到该虚拟机的远程桌面, 这样就能看到当前用户的操作了. 有一群人围观同一个界面的话, 那自然会有交流的需求, 所以我们再实现一个在线聊天的功能, 围观同一个虚拟机的用户自动加入一个群聊, 群聊里的成员可以通过网页在线聊天.

实现思路

正好有一个叫no vnc的项目, 实现了web版的vnc远程桌面客户端, 所以我们在远程虚拟机里装上vnc的服务端就好了, 而且vnc支持只读模式和操作模式, 可以用来实现围观功能. 虚拟机这个东西其实挺耗资源的, 一台主机开多个虚拟机的话肯定会很不稳定. 所以我们用docker来代替真实虚拟机. 使用docker同时能较好的控制虚拟机的内存, cpu资源占用. 并且用户操作完成之后可以直接删除容器, 不会有遗留的数据. 虚拟机运行在哪里呢? 买云服务器吗? 低配不行, 高配不经济, 旧电脑如果能利用起来的话就好了. 个人电脑最大的问题是 没有公网地址, no vnc 是通过websocket的来连接服务端的, 所以要求服务端得有公网地址, 如果通过服务器来进行中转那又得增加服务器带宽投入. 想到了之前了解过的web rtc, web rtc是现代浏览器都支持的功能, 他可以让网页支持p2p连接. p2p是点对点连接, 通信双方都不需要公网地址. 所以我们可以基于web rtc 实现一个fake websocket. 这个fake socket 底层是通过web rtc 的data channel来通信的, 但是提供和浏览器websocket类一样的接口. 这样的话, 我们只需稍微修改一下no vnc的源码, 让他创建web socket的时候使用我们的fake websocket 这样就实现了连接处于远程内网的虚拟机了. 至于在线聊天, 我们集成在服务端模块里面, 通过websocket和浏览器建立长连接, 用户在群里发消息时 服务端负责转发给所有群内的成员.

results matching ""

    No results matching ""