要在不同的文件中使用io对象,我使用下面的方法..我似乎没有得到编译错误。所以io在users.js文件中被“定义”..但我似乎没有发出任何事件。有没有人看到这个问题?
app.js
var app = require('express')()
, server = require('http').createServer(app)
global = require('./global.js');
global.io = require('socket.io').listen(server);
global.io.configure(function () {
global.io.set("transports", ["xhr-polling"]);
global.io.set("polling duration", 10);
});
// express settings
require('./config/express')(app, config, passport)
require('./config/passport')(passport, config, env)
// Bootstrap routes
require('./config/routes')(app,passport)
var port = process.env.PORT || 3000
server.listen(port)
global.js
var Global = {
io : { }
};
module.exports = Global;
routes.js
var users = require('../app/controllers/users')
module.exports = function (app, passport) {
app.post('/incomingFake', users.getFake);
}
users.js
var global = require('../../global.js')
exports.getFake = function(req, res){
global.io.sockets.on('connection', function(socket) {
socket.broadcast.emit('email', req.body);
});
User.findAndStoreEmail(senderEmail, email ,function(){
res.writeHead(200, {'content-type': 'text/plain'})
res.end('Message Received. Thanks!\r\n')
})
}
我尝试在前端
的主干集合中收到此内容define([
'jquery',
'underscore',
'backbone',
'Email',
'marionette',
'socketio'
], function ($, _, Backbone, emailModel, Marionette, io) {
'use strict';
var Emails = Backbone.Collection.extend({
url : '/emails',
model : emailModel,
initialize : function() {
var socket = io.connect('http://localhost:3000');
socket.on('email', function (data) {
console.log("i got the socket connection");
console.log(data);
});
}
});
return Emails;
});
编辑:
我意识到了什么!我认为这可能有很大的帮助来解决问题,我实际上收到连接事件和套接字发出的东西,但这一切都发生在页面加载..我希望这个事件只发出'getFake'函数被调用
答案 0 :(得分:2)
因为您正在尝试根据客户端所在的路径管理连接。
您可以尝试Socket.io namespaces
表示在由路径名标识的给定范围下连接的套接字池(例如:/ chat)。
默认情况下,客户端始终连接到/.
所以在服务器端代码上,一个简短的例子就是
io.of("/users").on("connection",function(socket){
/*
when connecting from /users, the socket object will be available here
*/
});
// all clients of pathname /users will get this message
io.of("/users").emit("greeding","Hello fellow users");