Node.js 如何将socket.io与最新的mean.io一起使用?
我已经获取了最新Mean.io的副本,并注意到与我以前使用的版本相比有很多更改。现在,我正在做的是创建一个非常基本的聊天应用程序,用于聊天室。按照Socket文档中的基本设置,我必须实现以下功能: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
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) {
});
});
};