如何使用最新的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上检查一下。