Day 26: TogetherJS —— 让我们一起来编程!

简介: 今天的《30天学习30种新技术》挑战,我打算学习一个源自Mozilla的很酷的JavaScript库——TogetherJS。几个月前,我写过一个面向Java 8的在线Java编辑器。今天我将学习如何使用TogetherJS来给这个应用增加协作功能。

编者注:我们发现了有趣的系列文章《30天学习30种新技术》,正在翻译,一天一篇更新,年终礼包。下面是第 26 天的内容。


今天的《30天学习30种新技术》挑战,我打算学习一个源自Mozilla的很酷的JavaScript库——TogetherJS。几个月前,我写过一个面向Java 8的在线Java编辑器。今天我将学习如何使用TogetherJS来给这个应用增加协作功能。

image.png

TogetherJS是什么?

TogetherJS是一个开源的HTML5 Javascript库,提供了用户间的即时协作功能。它同时通过WebRTC支持了多人间的文字、语音聊天功能。使用TogetherJS,多个用户可以在同一页面上交互,看到对方的光标位置,一起浏览和编辑一个站点。TogetherJS支持最新版的Firefox、Chrome和Safari。


TogetherJS Demo

Demo应用跑在OpenShift上:http://tryjava-t20.rhcloud.com/

image.png

点击“Start TogetherJS”按钮,开启新会话。会有确认框提示。

image.png

在点击“I'm Ready”前,用户可以修改自己的姓名和头像。

image.png

用户会收到一个链接,他可以把这个链接分享给其他用户。

image.png

我新开一个浏览器,打开邀请链接。

image.png

第二个用户加入之后,可以看到第一个用户的所有操作。

image.png

第二个用户编写了一个简单的Hello World Java 程序。第一个用户同样可以看到第二个用户的操作。

image.png

第一个用户打开聊天窗口,给第二个用户发送了一条信息。

image.png

第二个用户收到了信息。

image.png

第一个用户修正了分号问题,第二个用户马上看到了改动。

image.png

第一个用户运行了程序,然后结束了会话。

image.png

Github仓库

今天的示例程序的代码可以从Github取得。


依赖

我们将使用Harp作为静态web服务器。Harp可以使用NPM安装。

npm install -g harp

开发TogetherJS应用

创建一个day26demo目录,在其中新建一个index.html文件,内容如下:

<!doctype html>

<htmllang="en">

<head>

<metacharset="utf-8">

<metaname="viewport"content="width=device-width, initial-scale=1.0">

<metaname="description"content="Run Java 8 in Cloud">

<metaname="author"content="Shekhar Gulati">

<title>TryJava8 | Run Java 8 in Cloud | Powered by OpenShift</title>

<linkrel="stylesheet"href="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.19.0/codemirror.css">

<scriptsrc="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.19.0/codemirror.min.js"></script>

<scriptsrc="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.19.0/addon/edit/matchbrackets.js"></script>

<scripttype="text/javascript"src="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.19.0/mode/clike/clike.js"></script>

<style>

.CodeMirror {

   border: 2px inset #dee;

}

body{

   padding-top: 80px;

}

</style>

<linkrel="stylesheet"href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css">

</head>

<body>

   <navclass="navbar navbar-default navbar-inverse navbar-fixed-top"role="navigation">

 <divclass="navbar-header">

   <buttontype="button"class="navbar-toggle"data-toggle="collapse"data-target="#bs-example-navbar-collapse-1">

     <spanclass="sr-only">Toggle navigation</span>

     <spanclass="icon-bar"></span>

     <spanclass="icon-bar"></span>

     <spanclass="icon-bar"></span>

   </button>

   <aclass="navbar-brand"href="/">TryJava</a>

 </div>

 <divclass="collapse navbar-collapse"id="bs-example-navbar-collapse-1">

   <ulclass="nav navbar-nav">

     <liclass="active"><ahref="/">Home</a></li>

   </ul>

  </div>

</nav>

   <divclass="jumbotron container">

       <h1>TryJava8 -- Free , Online Java 8 Code Editor</h1>

       <p>Write your Java 8 code online anywhere , anytime...</p>

     </div>

   <divclass="container">

       <divclass="row">

           <divclass="col-md-7">

               <h2>Run your Java 8 Code</h2>

               <formid="codeForm">

                   <divclass="control-group">

                       <divclass="controls">

                           <textareaid="code"name="code"

                               placeholder="Write your Java8 Code"></textarea>

                       </div>

                   </div>

                   <divclass="control-group">

                       <divclass="controls">

                           <buttontype="submit"class="btn btn-success">Run Code</button>

                       </div>

                   </div>

               </form>

           </div>

           <divid="outputBox"class="col-md-4 col-md-offset-1">

               <divid="resultRow"class="row">

                   <h2>Program Output</h2>

                   <divid="result"class="col-md-4"></div>

               </div>

           </div>

       </div>

       <hr>

       <footerid="footer">

           <p>&copy; Shekhar Gulati 2013</p>

           <p>

               Made with love by <ahref="https://twitter.com/shekhargulati/"

                   target="_blank">Shekhar Gulati</a>. Contact him at <a

                   href="mailto:shekhargulati84@gmail.com">shekhargulati84@gmail.com</a>.

           </p>

           <p>

               <ahref="https://www.openshift.com/"target="_blank"><img

                   alt="Powered by OpenShift"

                   src="https://www.openshift.com/sites/default/files/images/powered-transparent-black.png"></a>

           </p>

       </footer>

   </div>

   <scriptsrc="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

   <script>

       var editor = CodeMirror.fromTextArea(document.getElementById("code"), {

           lineNumbers : true,

           matchBrackets : true,

           mode : "text/x-java"

       });

   </script>

</body>

</html>

我们使用了Twitter Bootstrap 3、jQuery和CodeMirror。


运行Java程序

接着我们在index.html</body>前添加相应的代码,使用jQuery进行POST请求,以便执行Java代码。

<script type="text/javascript">

       $("#codeForm").submit(

           function(event) {

               event.preventDefault();

               $("#status").empty();

               $("#result").empty();

               var code = $('textarea').val();

               if (!code) {

                   alert("Please write some code");

                   return;

               }

               var data = {code : code};

 `             var url = "http://tryjava-t20.rhcloud.com/api/snippets";

               $.ajax( url,

                       {

                           data : JSON.stringify(data),

                           crossDomain : true,

                           contentType : 'application/json',

                           type : 'POST',

                           async : true,

                           success : function(result) {

                               $("#resultRow").show();

                               if (result.compilerOutput != 0) {

                                   $("#result").append("<p class='text-error'>"+ result.result + "</p>");

                               } elseif (result.verdict === "FAILURE") {

                                   $("#result").append("<p class='text-error'>"+ result.result+ "</p>");

                               } else {

                                   $("#result").append("<p class='text-success'>"+ result.result+ "</p>");

                               }

                           },

                           error : function() {

                               alert("Something wrong happened on the server");

                           }

                       });

           });

   </script>

添加协作功能

现在我们将使用TogetherJS添加协作功能。

<scriptsrc="//togetherjs.com/togetherjs-min.js"></script>

Run Code按钮旁添加协作按钮:

<button class="btn btn-info"onclick="TogetherJS(this); return false;">Start TogetherJS</button>

刷新一下浏览器,你会看到Start TogetherJS按钮。点击按钮后,TogetherJS会初始化库,显示opt-in对话框,然后用户就可以看到别的用户的操作了。

TogetherJS的会话连接到你启动它的域名。所以如果你的部分站点在别的域名上,用户们无法跨域交流。httpshttp的差别也会导致会话无法建立。


自己部署TryJava应用

你可以将你自己的TryJava应用部署在云端。后端和前端的代码都是开源的

将应用部署到OpenShift之前,我们需要进行一些设置:

  1. 注册一个OpenShift账号。注册是完全免费的,Red Hat给每个用户三枚免费的Gear,可以用Gear运行你的应用。在写作此文的时候,每个用户能免费使用总共 1.5 GB 内存和 3 GB 硬盘空间。
  2. 安装 rhc客户端工具rhc是ruby gem,因此你的机子上需要装有 ruby 1.8.7以上版本。 只需输入 sudo gem install rhc即可安装 rhc 。如果你已经安装过了,确保是最新版。运行sudo gem update rhc即可升级。关于配置rhc命令行工具的详细信息,请参考: https://openshift.redhat.com/community/developers/rhc-client-tools-install
  3. 使用 rhc 的 setup 命令配置你的 OpenShift 账号。这个命令会帮助你创建一个命名空间,同时将你的ssh公钥上传至 OpenShift 服务器。


设置之后,输入如下命令即可将应用部署到 OpenShift:

rhccreate-apptryjavadiymogodb-2--from-code=https://github.com/shekhargulati/tryjava.git

这个命令将创建应用,设置公开的DNS,创建私有git仓库,最后利用你的Github仓库中的代码来部署应用。应用可以通过 http://tryjava-t20.rhcloud.com/ 访问。

今天就到这里了。多多反馈。

相关文章
|
XML 前端开发 IDE
在 Compose 中使用 Jetpack 组件库
在 Compose 中使用 Jetpack 组件库
1221 0
|
芯片
51单片机--点亮LED灯和流水灯
51单片机--点亮LED灯和流水灯
586 0
|
消息中间件 安全 JavaScript
优雅的接口防刷处理方案! 上
优雅的接口防刷处理方案! 上
|
存储 安全 Java
Java学习笔记 02、Java的基本概念
Java学习笔记 02、Java的基本概念
Java学习笔记 02、Java的基本概念
|
19天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
32076 116
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
8天前
|
应用服务中间件 API 网络安全
3分钟汉化OpenClaw,使用Docker快速部署启动OpenClaw(Clawdbot)教程
2026年全新推出的OpenClaw汉化版,是基于Claude API开发的智能对话系统本土化优化版本,解决了原版英文界面的使用壁垒,实现了界面、文档、指令的全中文适配。该版本采用Docker容器化部署方案,开箱即用,支持Linux、macOS、Windows全平台运行,适配个人、企业、生产等多种使用场景,同时具备灵活的配置选项和强大的扩展能力。本文将从项目简介、部署前准备、快速部署、详细配置、问题排查、监控维护等方面,提供完整的部署与使用指南,文中包含实操代码命令,确保不同技术水平的用户都能快速落地使用。
4701 4
|
14天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
6761 18
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
|
13天前
|
人工智能 机器人 Linux
OpenClaw(Clawdbot、Moltbot)汉化版部署教程指南(零门槛)
OpenClaw作为2026年GitHub上增长最快的开源项目之一,一周内Stars从7800飙升至12万+,其核心优势在于打破传统聊天机器人的局限,能真正执行读写文件、运行脚本、浏览器自动化等实操任务。但原版全英文界面对中文用户存在上手门槛,汉化版通过覆盖命令行(CLI)与网页控制台(Dashboard)核心模块,解决了语言障碍,同时保持与官方版本的实时同步,确保新功能最快1小时内可用。本文将详细拆解汉化版OpenClaw的搭建流程,涵盖本地安装、Docker部署、服务器远程访问等场景,同时提供环境适配、问题排查与国内应用集成方案,助力中文用户高效搭建专属AI助手。
4753 11