在node.js中使用socket.io共享协作工作的url

我正在使用node.js和socket.io来处理多用户绘图应用程序

我在node.js上使用快速Web框架

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做的事情。 每当用户访问Web应用程序,一个新的应用程序实例提供给他,现在他可以共享某种操纵或任何其他随机世代的url,他可以连接其他用户/同龄人,使他们都可以协作工作,在我的情况下合作绘图。

所以事情是如何实现这一点。 将相同的index页面呈现给每个新来的用户,然后为他提供共享某种URL的function,以便与该特定URL有关的用户能够使用sockrt.io协作他们的工作,并且该过程继续用于其他n用户协作他们与其他m用户的工作。

使用别人

你应该看看Etherdraw 。 它完全是你用Node.js和socket.io描述的。

滚你自己的

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

  2. 当新用户请求一个房间(draw.yoursite.com/[room_id])时,查询数据存储。 (Etherdraw默认以平面文件格式存储JSON格式的数据,但build议使用MongoDB之类的东西进行testing以外的其他任何操作。)

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