HTML5 / JS和websockets中的实时协作绘图白板?

时间:2011-07-27 14:00:40

标签: javascript html5 canvas webkit websocket

我正在尝试为我的一些高级学生组建一个小型(ish)暑期学校项目,并正在研究如何做到最好和使用什么 - 希望有人在这里可以指出我正确的方向。

我们感兴趣的是研究HTML5是否足以在其中创建实时协作绘图白板 - 纯粹通过使用没有插件的Web技术(所以CSS,HTML5 / DOM和Javascript)。我们最终要努力的是 - 例如,在教室的大屏幕上显示中央服务器上的在线画布/页面。然后我们的学生/用户将拿出他们的智能手机,在他们的移动浏览器中加载页面(我现在完全可以将其限制为webkit移动浏览器)并在他们的屏幕上用触摸/手指(或在带有鼠标的PC上) - 猜测这并没有太大的区别)并且它会在每个人的实时更新 - 无论是在他们的屏幕上还是在教室的中央大屏幕上。

我猜测推送/获取请求对此来说太慢了 - 可以通过websockets解决吗?有没有人有任何好的JS库可供推荐?

理想(但学生更容易理解)体系结构的样子是什么样的。假设你在一个clasroom中有30个并发用户 - 每个用户都会将websockets连接到服务器,服务器将所有请求汇集/组合成一个,然后返回组合文件(某种最小的JSON甚至只是坐标) )为每个连接的用户?

websockets和(我猜)画布能够接受吗?所以一切看起来都很活泼?是否有类似jQuery的JS库可以让我们的生活变得更轻松 - 或者你认为它对于为期两周的暑期学校项目来说太复杂了吗?

4 个答案:

答案 0 :(得分:15)

这是一个教程,描述如何使用javascript / html5 / canvas创建多用户白板:

http://www.unionplatform.com/?page_id=2762

该示例使用名为“union platform”的协作框架和服务器。即使您决定推出自己的服务器和客户端框架,示例中的消息也应该让您了解如何构建代码。

对于websocket与彗星的苹果对苹果速度比较,请参阅: http://www.unionplatform.com/?page_id=2954

在我的测试中,对WebSocket的基本ping通常比ping over http快两倍。 websocket和coment都足够快,可以创建协作白板。

答案 1 :(得分:8)

答案 2 :(得分:5)

对于网络方面的问题,请尝试查看服务器的node.js以及客户端的socket.io

至于绘图本身,一些流行的选择是processingraphaelcakejs

在实施方面,您可能希望了解联网游戏如何处理类似问题(gamedev.stackexchange.com可能有用)。

你将要做的事情与一个简单的自上而下的多人游戏基本相同,在这种情况下,每个'玩家'都是学生指尖,而'等级'是画布。您需要更新服务器的位置以及它们是否“拍摄”(绘图)。

答案 3 :(得分:3)

  

我猜测推送/获取请求对此来说太慢了 - 可以通过websockets解决吗?有人为此推荐任何好的JS库吗?

如果您需要实时基础架构,我已经创建了一个可能对您有用的实时技术列表。这些包括托管服务,例如我工作的Pusher,以及WebSocket和Comet解决方案等自安装技术。

WebSocket听起来像是您的技术选择,因为它们已成为HTML5的一部分,并为Web服务器和浏览器(或其他客户端)之间的实时双向通信提供最有效的通信。

  

理想(但学生更容易理解)体系结构的样子是什么样的。假设你在一个clasroom中有30个并发用户 - 每个用户都会将websockets连接到服务器,服务器将所有请求汇集/组合成一个,然后返回组合文件(某种最小的JSON甚至只是坐标) )为每个连接的用户?

听起来你应该将当前状态存储在应用程序显示状态的初始状态。然后使用您的实时基础设施在该状态上发送增量,或者如果它是画布上的绘图,则只绘制已绘制的线等信息以及有关谁绘制它的信息。

  

websockets和(我猜)画布能够接受吗?所以一切看起来都很活泼?是否有类似jQuery的JS库可以让我们的生活变得更轻松 - 或者你认为它对于为期两周的暑期学校项目来说太复杂了吗?

实时协作绘图绝对是可以实现的,并且已经创建了许多示例。 google提出了许多可能性。

如果这项技术对您来说是全新的,并且您更愿意专注于构建协作应用程序,那么我会考虑为您的应用程序使用服务,而不是经历学习如何安装和配置甚至代码的麻烦。你自己的基础设施(我不只是说这个,因为我为这样的服务工作。老实说,我认为这是最有意义的。)