使用node.js中的socket.io共享用于协作工作的URL

时间:2013-10-25 19:52:25

标签: node.js url express socket.io

我正在使用node.js和socket.io

开发多用户绘图应用

我在node.js上使用express web framework

var express = require("express"),
    http = require("http");
var hoganex = require('hogan-express');
var app = express(),
    server = http.createServer(app)
    io = require('socket.io').listen(server);

var routes = require('./routes');

 var app = express({
   views: path.join(__dirname, 'views')
 });
app.set('views', __dirname + '/views');

app.set('view engine', 'html');
app.set('layout', 'layout.html');
app.engine('html', hoganex);
app.get('/test', routes.index);
app.use(express.static(__dirname + '/assets'));

// Listen for incoming connections from clients
io.sockets.on('connection', function (socket) {
//code for collaboration goes here using socket.on and other methods for sending...
});

我想做一些与etherpadtogetherjs类似的事情。每当用户访问webapp时,都会向他提供该应用程序的新实例,现在他可以共享某种操纵或任意其他随机生成的url,通过这种方式,他可以连接其他用户/同伴,以便他们可以协作他们的工作,在我看来是协作绘图。

所以问题是如何实现这一目标。将相同的index页面呈现给每个新传入的用户,然后为他提供共享某种URL的功能,以便与该特定URL相关的用户能够使用sockrt.io协作他们的工作并继续执行该过程。其他n个用户与其他m用户协作完成工作。

1 个答案:

答案 0 :(得分:3)

使用别人

你应该看看Etherdraw。它完全按照您使用Node.js和socket.io描述的内容。

自己动手

  1. 当用户访问您的网站时,我们称之为draw.yoursite.com,在数据存储区中创建一个新的唯一room_id,并将用户发送到空白画布。当用户绘制时,通过socket.io将绘图数据(即行的类型,行开始(x,y),行结束(x,y))发送到服务器。数据存储在数据存储区中,并发布给订阅该房间的所有用户(pub / sub)。

  2. 当新用户请求房间(draw.yoursite.com/ [room_id])时,将查询数据存储。 (默认情况下,Etherdraw将数据以JSON格式存储在flatfile中,但建议将MongoDB之类的东西用于测试以外的任何其他内容。)

  3. 如果请求的房间已经存在,请发回该房间的数据。图纸作为(x,y)坐标存储在数据存储区中,其中的属性描述了如何连接点(即直线,粗体,弧形等)。