Node.js 如何将socket.io与最新的mean.io一起使用?

Node.js 如何将socket.io与最新的mean.io一起使用?,node.js,chat,socket.io,mean-stack,Node.js,Chat,Socket.io,Mean Stack,我已经获取了最新Mean.io的副本,并注意到与我以前使用的版本相比有很多更改。现在,我正在做的是创建一个非常基本的聊天应用程序,用于聊天室。按照Socket文档中的基本设置,我必须实现以下功能: var app = require('express')() , server = require('http').createServer(app) , io = require('socket.io').listen(server); server.listen(80); app.ge

我已经获取了最新Mean.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.将此项目用于其依赖项注入

最后,您需要将应用程序配置为侦听每个套接字连接 也许你想在你的主应用的路由器上做这些

/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>
//在“/server/views/includes/foot.html”上
var socket=io();

最新版本v0.4.0需要另一种策略来设置socket.io。我目前正在与一个项目贡献者讨论,以验证我的解决方案。一旦我100%确定,我会确保更新我的回复


meanio包现在是引导功能所在的地方,也是调用express安装程序的地方

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

我刚刚回复了另一篇SO帖子()

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

在这里再次粘贴我的答案


我也面临同样的问题,花了大约一周的时间才最终解决。我将尝试解释我所做的:

app.js

在这个文件中,我只调用为我创建和设置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;
});
server/config/socketio.js

此文件仅配置socket.io对象。请注意,为了完成这项工作,我必须将meanio模块升级到版本0.5.26,因为http对象(express server)在旧的meanio版本中不可用。此外,如果您想使用ssl,可以插入https而不是http

路由/chat.js

最后,使用routes文件定义套接字事件等

'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) {

        });
    });
};

希望这有帮助

是否对此有任何更新,或者您是否仍在确保它完全正常工作?顺便说一下,谢谢!进展:…只是想补充一点,这段代码终于进入了官方的meansocket实现。所以,一定要去看看!它还解决了在单个端口后部署meanio和MeanSocket的问题,这在以前是不受支持的。
'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) {

        });
    });
};