如何使用最新的mean.io使用socket.io?

我已经提取了最新的Mean.io的一个副本,并注意到与我以前一直在使用的以前的版本相比,相当多的变化。 现在,我正在做的是创build一个非常基本的聊天应用程序,使用socket.io与房间。 在Socket文档的基本设置之后,我必须实现以下内容:

var app = require('express')() , server = require('http').createServer(app) , io = require('socket.io').listen(server); server.listen(80); app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); 

我将在哪里定义基本的套房设置?

 socket.set("log level", 1); var people = {}; var rooms = {}; var clients = []; 

你可以设置socket.io来监听你的服务器

 /server/config/system/bootstrap.js 

需要socket.io模块

 var express = require('express'), appPath = process.cwd(), io = require('socket.io'); 

现在设置socket.io来监听你的应用程序

 // Express settings var app = express(); require(appPath + '/server/config/express')(app, passport, db); io = io(app.listen(3000)); return io; 

然后,您需要在bootstrapDependencies()函数中将socket.io对象注入到您的应用程序中。

 function bootstrapDependencies() { ... // Register socket.io dependency mean.register('io', function() { return io; }); } 

Mean.use这个项目的dependency injectionhttps://www.npmjs.org/package/dependable

最后,你需要configuration你的应用程序来侦听每个套接字连接,可能你想在你的主应用程序的路由器上执行这些连接

 /server/routes/index.js 

示例连接处理程序

 var io = require('meanio').io; io.on('connection', function (socket) { // emit data to the clients socket.emit('news', { hello: 'world' }); // event listeners socket.on('my other event', function (data) { // call your controller function here Controller.action(data); }); }); 

更重要的是,不要忘记在客户端设置socket.io。

 // on '/server/views/includes/foot.html' <script src='/socket.io/socket.io.js'></script> <script> var socket = io(); </script> 

我刚刚回复了另一个SOpost( Mean.io framwork和socket.io )。

注意:我使用的是mean.io v0.5.26和socket.io v1.1.0。

再次粘贴我的答案,在这里。


我也遇到了同样的问题,花了我一个星期的时间,终于搞定了。 我会试着解释我做了什么:

app.js

在这个文件中,我只是调用为我创build和设置一个socket.io对象的代码,然后将其传递给routes模块。

 'use strict'; /* * Defining the Package */ var Module = require('meanio').Module; var MeanSocket = new Module('chat'); /* * All MEAN packages require registration * Dependency injection is used to define required modules */ MeanSocket.register(function(app, http) { var io = require('./server/config/socketio')(http); //We enable routing. By default the Package Object is passed to the routes MeanSocket.routes(io); return MeanSocket; }); 

服务器/configuration/ socketio.js

这个文件只是configurationsocket.io对象。 请注意,由于http对象(快速服务器)在较早的有限版本中不可用,因此我必须将此模块升级到版本0.5.26。 而且,如果你想使用ssl,你可以注入https而不是http

 'use strict'; var config = require('meanio').loadConfig(), cookie = require('cookie'), cookieParser = require('cookie-parser'), socketio = require('socket.io'); module.exports = function(http) { var io = socketio.listen(http); io.use(function(socket, next) { var data = socket.request; if (!data.headers.cookie) { return next(new Error('No cookie transmitted.')); } var parsedCookie = cookie.parse(data.headers.cookie); var sessionID = parsedCookie[config.sessionName]; var parsedSessionID = cookieParser.signedCookie(parsedCookie[config.sessionName], config.sessionSecret); if (sessionID === parsedSessionID) { return next(new Error('Cookie is invalid.')); } next(); }); return io; }; 

路线/ chat.js

最后,使用路由文件来定义套接字事件等。

 'use strict'; // The Package is passed automatically as first parameter module.exports = function(MeanSocket, io) { io.on('connection', function(socket) { console.log('Client Connected'); socket.on('authenticate', function(data, callback) { }); }); }; 

希望这可以帮助!

最新的更新v0.4.0需要另一种策略来获取socket.io安装程序。 我目前正在和其中一个项目贡献者进行讨论,以validation我的解决scheme。 一旦我100%确定,我会确保更新我的回应。

现在,引导程序function所在的位置,以及正在从中调用快速设置的位置。

看起来像mean.io家伙最近发布了一个官方的Socket.io实现,直接与他们的堆栈集成。 在Github上检查一下。