Javascript 不同文件中的Socket.io
要在不同的文件中使用io对象,我使用下面的方法。。我似乎没有收到编译错误。因此io在users.js文件中被“定义”。。但我似乎并没有提名任何活动。有人看到问题了吗 app.jsJavascript 不同文件中的Socket.io,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,要在不同的文件中使用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);
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”函数,因为您正试图基于客户端所在的路由管理连接 你可以试试 表示在由路径名(例如:/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");
您是否在“连接”活动中收到任何信息?你在这里发出“email”,但我没有看到接受“email”事件的代码。只是编辑了我的问题,谢谢我甚至没有从我的连接事件中收到任何东西。这是一种肮脏的伎俩,它会导致你在“what's not work”问题上损失数小时,与其这样做,不如尝试使用名称空间,如果这是你想要的,例如(“/users”)的
io...
,以及(“/store”)的io...
您的控制台中有任何错误吗?非常感谢,这很有帮助