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

TogetherJS是什么?

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

TogetherJS Demo

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

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

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

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

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

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

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

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

第二个用户收到了信息。

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

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

Github仓库

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

依赖

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

npm install -g harp

开发TogetherJS应用

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

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Run Java 8 in Cloud">
<meta name="author" content="Shekhar Gulati">
<title>TryJava8 | Run Java 8 in Cloud | Powered by OpenShift</title><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.19.0/codemirror.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.19.0/codemirror.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.19.0/addon/edit/matchbrackets.js"></script>
<script type="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><link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css">
</head><body><nav class="navbar navbar-default navbar-inverse navbar-fixed-top" role="navigation"><div class="navbar-header"><button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="/">TryJava</a></div><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li class="active"><a href="/">Home</a></li></ul></div>
</nav><div class="jumbotron container"><h1>TryJava8 -- Free , Online Java 8 Code Editor</h1><p>Write your Java 8 code online anywhere , anytime...</p></div><div class="container"><div class="row"><div class="col-md-7"><h2>Run your Java 8 Code</h2><form id="codeForm"><div class="control-group"><div class="controls"><textarea id="code" name="code"placeholder="Write your Java8 Code"></textarea></div></div><div class="control-group"><div class="controls"><button type="submit" class="btn btn-success">Run Code</button></div></div></form></div><div id="outputBox" class="col-md-4 col-md-offset-1"><div id="resultRow" class="row"><h2>Program Output</h2><div id="result" class="col-md-4"></div></div></div></div><hr><footer id="footer"><p>&copy; Shekhar Gulati 2013</p><p>Made with love by <a href="https://twitter.com/shekhargulati/"target="_blank">Shekhar Gulati</a>. Contact him at <ahref="mailto:shekhargulati84@gmail.com">shekhargulati84@gmail.com</a>.</p><p><a href="https://www.openshift.com/" target="_blank"><imgalt="Powered by OpenShift"src="https://www.openshift.com/sites/default/files/images/powered-transparent-black.png"></a></p></footer></div><script src="//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>");} else if (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添加协作功能。

<script src="//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:

rhc create-app tryjava diy mogodb-2 --from-code=https://github.com/shekhargulati/tryjava.git

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

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


原文 Day 26: TogetherJS--Let's Code Together
翻译 SegmentFault

Day 26: TogetherJS —— 让我们一起来编程!相关推荐

  1. 【26天高效学完Java编程】Day03:Java中的运算符与流程控制语句的基本概念与实操

    本专栏将从基础开始,循序渐进,由浅入深讲解Java的基本使用,希望大家都能够从中有所收获,也请大家多多支持. 专栏地址:26天高效学完Java编程 相关软件地址:链接地址 所有代码地址:链接地址 如果 ...

  2. 【26天高效学完Java编程】Day02:开发利器之IDEA的安装使用、Java标识符、字符串及运算符等基础知识点详解

    本专栏将从基础开始,循序渐进,由浅入深讲解Java的基本使用,希望大家都能够从中有所收获,也请大家多多支持. 专栏地址:26天高效学完Java编程 相关软件地址:链接地址 所有代码地址:链接地址 如果 ...

  3. 26岁现在想转行学习编程,晚了吗?

    前段时间小编在逛知乎时(看知乎一时爽,一直看一直爽),发现了这样一个相似的问题:26岁开始学编程晚了吗? 在这个问题下面,很多答主都从技术和自身学习经验的角度给出了非常优质的回答.但其中一条,虽只有寥 ...

  4. 【26天高效学完Java编程】Day11:继承、抽象类、模板设计模式详解

    本专栏将从基础开始,循序渐进,由浅入深讲解Java的基本使用,希望大家都能够从中有所收获,也请大家多多支持. 专栏地址:26天高效学习Java编程 相关软件地址:软件地址 所有代码地址:代码地址 如果 ...

  5. 【蓝桥杯国赛真题26】Scratch队列练习 少儿编程scratch图形化编程 蓝桥杯国赛真题讲解

    目录 scratch队列练习 一.题目要求 编程实现 二.案例分析 1.角色分析

  6. 30 天学习 30 种新技术系列

    编者注:我们发现了比较有趣的系列文章<30 天学习 30 种新技术>,准备翻译,一天一篇更新,年终礼包.以下是译文,英文标题表示还未翻译,附原文链接:中文标题表示已翻译,附译文链接. 更新 ...

  7. Java 使用ZeroMQ 2.2 进行通信编程

    需要用到网络通信时,ZeroMQ( 简称ZMQ )比较方便,他提供了许多对服务端和客户端之间的通信方式:REP/REQ.PULL/PUSH( 应用这两个就能实现比较简单的数据查询与发送功能 ), 具体 ...

  8. 网络编程——第一部分

    新博客地址:Temi 第一讲,第二讲:Java基础第23天-01-网络编程(概述),第23天-02-网络编程(概述2) 一,网络通信步骤: 找到对方(通过IP). 数据要发送到对方指定的应用程序上,为 ...

  9. 【正点原子Linux连载】第二十章 V4L2摄像头应用编程-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

最新文章

  1. 数据蒋堂 | 迭代聚合语法
  2. Java教程分享:使用Spring框架能带来哪些好处?
  3. synchronized和ReentrantLock区别,用新的lock有什么好处?举例说说
  4. Sql server 数据转到 Mysql 数据库
  5. 1月 23 surface pro 3. windows ubuntu 双系统安装
  6. USB C口5V输入,四节串联锂电池充电管理芯片,IC电路板PW4405芯片-22号电路板
  7. Linux下go环境安装、环境配置并执行第一个go程序
  8. 极致”神话和产品观念
  9. Python win32gui.ShowWindow() 窗口没弹出来解决方法
  10. 十大编程语言黑客向,学会一个不怕没工作,全部学会随便秀操作
  11. word生成目录右对齐
  12. 前端埋点数据收集及上报方案
  13. c语言程序设计作业电话簿,C语言设计简易电话簿
  14. MVP+Dragger2+Rxjava2+Retrofit+OKhttp进行开发。
  15. c语言求矩阵各行元素之和
  16. 传奇如何读取服务器信息,传奇服务器修改之命令服务脚本详细使用方法介绍
  17. python Matplotlib库基础
  18. 掌握这个学习方法,让3d建模 不再从入门到放弃
  19. html2canvas 前端截图工具 iOS15 中截图空白
  20. 如何新建盟军敢死队2地图

热门文章

  1. 杨鹏谈世纪佳缘推荐算法:基于Spark GraphX,弃GBDT和LR用FM
  2. php manual 反射,Laravel框架源码解析之反射的使用详解
  3. Redis - Spring Data Redis 操作 Jedis 、Lettuce 、 Redisson
  4. Spring-AOP @AspectJ切点函数之execution()
  5. RocketMQ:Consumer概述及启动流程与消息拉取源码分析
  6. 树莓派上操作环境安装配置
  7. 目录创建 android,创建目录浏览器  |  Android 开发者  |  Android Developers
  8. linux 提取某一行内容
  9. 拼写检查工具是android,Android的文本和输入---拼写检查器(一)-Go语言中文社区...
  10. jquery 分片上传php,php 大文件分片上传