如何从路由文件在socket.io中发出事件
How to emit an event in socket.io from the routes file?
这是我的应用程序配置
app.js
//SERVER
var server = app.listen(3000, function(){
console.log("Express server listening on port %d in %s mode", app.get('port'),
app.settings.env);
});
//SOCKET.IO
var io = require('./socket.io').listen(server)
/插座
var socketio = require('socket.io')
module.exports.listen = function(app)
{
io = socketio.listen(app);
io.configure('development',function()
{
//io.set('transports', ['websocket', 'xhr-polling']);
//io.enable('log');
});
io.configure('production',function()
{
io.enable('browser client minification'); // send minified client
io.enable('browser client etag'); // apply etag caching logic based on version number
io.set('log level', 1); // reduce logging
io.set('transports', [ // enable all transports (optional if you want flashsocket)
'websocket'
, 'flashsocket'
, 'htmlfile'
, 'xhr-polling'
, 'jsonp-polling'
]);
});
io.sockets.on('connection', function (socket)
{
console.log("new connection: "+socket.id);
socket.on('disconnect',function(){console.log("device "+socket.id+" disconnected");});
socket.emit('news', { hello: 'world' });
socket.on('reloadAccounts',function(data)
{
var accounts=['account1','account2']
socket.emit('news',accounts)
});
});
return io
}
/路由
exports.newAccount=function(fields,callback)//localhost:3000/newAccountForm
{
//... bla bla bla config db connection bla bla bla
db.collection('accounts').insert(fields,function(err,result)
{
if(err)
{
console.warn(err);
db.close();
return callback(err,null);
}else{
if(result)
{
db.close();
return callback(null,result);
socket.emit('new account created',result) // i want to emit a new event when any user create an account
}else{
db.close();
return callback('no se consigue resultado',null);
}
}
})
});
}
如何从路由文件在socket.io中发出事件?
首先,您需要决定要发送新信息的套接字。如果是所有这些(连接到你的应用程序的每个人),那就很容易了,只需使用io.sockets.emit:
在./socket.io
文件中,在io = socketio.listen(app);
之后的某个位置添加exports.sockets = io.sockets;
。然后在路由文件中,您可以像这样发出:
var socketio = require('./socket.io');
socketio.sockets.emit('new account created', result);
如果你知道你想发送到的套接字id,那么你可以这样做:
var socketio = require('./socket.io');
socketio.sockets.sockets[socketId].emit('new account created', result);
您也可以通过express会话id:选择套接字
首先,您需要在授权时将会话id附加到套接字:
io.set('authorization', function (data, accept) {
// check if there's a cookie header
if (data.headers.cookie) {
// if there is, parse the cookie
data.cookie = cookie.parse(data.headers.cookie);
// note that you will need to use the same key to grad the
// session id, as you specified in the Express setup.
data.sessionID = data.cookie['express.sid'];
} else {
// if there isn't, turn down the connection with a message
// and leave the function.
return accept('No cookie transmitted.', false);
}
// accept the incoming connection
accept(null, true);
});
然后您可以选择会话id为的套接字
var socketio = require('./socket.io');
var sockets = socketio.sockets.forEach(function (socket) {
if (socket.handshake.sessionID === req.sesssionID)
socket.emit('new account created', result);
});
您还可以查询会话存储,并使用上面描述的方法,将事件发送到具有与查询匹配的sessionId的套接字。
相关文章:
- 点击启动弹出事件未显示
- 如何在Ol3弹出窗口中添加用javascript创建的按钮上的点击事件
- 单击事件打开两个弹出菜单
- D3.js:如何在svg上移动鼠标时创建弹出事件
- 萨特利泽关闭弹出事件
- 为什么不't通过socket.io发射事件火
- 如何使用流的排出事件.在节点.js中可写
- 如何在高图表中查找鼠标出事件的系列名称
- 如何使用 socket.io 发出事件以响应事件
- socket.io 连接事件不起作用,为什么
- jQuery列表中每个产品的基于悬停的弹出事件
- 在服务器本身上套接字IO jquery事件
- 无法抛出事件
- 鼠标悬停和鼠标移出事件是否不匹配?
- 谷歌地图折线滑出事件
- 鼠标悬停/出事件时奇怪的动画行为
- NodeJS + Socket.io连接事件处理程序未被成功调用
- JavaScript对话框弹出事件等待OK被按下
- JQuery的可拉出事件不触发,有时可拖动与光标
- 弹出事件处理程序