HTML5/JS和websockets的实时协同绘图白板

Real-time collaborative drawing whiteboard in HTML5/JS and websockets?

本文关键字:绘图 白板 实时 JS websockets HTML5      更新时间:2023-09-26

我正在尝试为我的一些高级学生组织一个小型的暑期学校项目,我正在研究如何做得最好以及使用什么-希望这里有人能给我指出正确的方向。

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

我猜推送/获取请求会太慢,这可以通过websockets解决吗?有人有什么好的JS库可以推荐吗?

理想的(但对学生来说更容易理解)建筑是什么样子的?假设你在一个教室里有30个同时使用的用户——他们每个人都用websockets连接到服务器,服务器会将他们所有的请求合并成一个,然后为每个连接的用户返回合并后的文件(某种最小的JSON甚至只是坐标)?

将websockets和(我猜)画布能够采取这一点?这样一切看起来都还很漂亮?有没有(类似于jquery的)JS库可以让我们的生活变得更容易——或者你认为它对于一个两周的暑期学校项目来说太复杂了?

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

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

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

websocket和comet的速度比较,见:http://www.unionplatform.com/?page_id=2954

在我的测试中,通过WebSocket的基本ping通常比通过http的ping快两倍。websocket和comment都足以快速创建协作式白板。

一定要看看这个

http://wesbos.com/html5-canvas-websockets-nodejs/

对于网络方面的东西,尝试查看服务器的node.js,以及socket。客户端IO

至于绘画本身,一些流行的选择是processing, raphael和cakejs。

当涉及到实现时,你可能想看看网络游戏如何处理类似的问题(gamedev.stackexchange.com可能很有用)。

你要做的基本上与简单的自上而下多人游戏相同,在这种情况下,每个"玩家"是学生的指尖,"关卡"是画布。你需要更新服务器关于他们的位置,以及他们是否正在"射击"(绘图)。

我猜推送/获取请求会太慢,这可以通过websockets解决吗?有人有什么好的JS库可以推荐吗?

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

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

理想的(但对学生来说更容易理解)建筑是什么样子的?假设你在一个教室里有30个同时使用的用户——他们每个人都用websockets连接到服务器,服务器会将他们所有的请求合并成一个,然后为每个连接的用户返回合并后的文件(某种最小的JSON甚至只是坐标)?

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

将websockets和(我猜)画布能够采取这一点?这样一切看起来都还很漂亮?有没有(类似于jquery的)JS库可以让我们的生活变得更容易——或者你认为它对于一个两周的暑期学校项目来说太复杂了?

实时协作绘图绝对是可以实现的,并且已经创建了许多这样的例子。一个谷歌带来了许多可能性。

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