我正在做一个使用高速公路+socket.io(带有SessionSocket插件)+ mongoosejs的系统。
服务器的构建方式如下:
var mongoose = require('mongoose'),
connect = require('connect'),
express = require('express'),
http = require('http'),
io = require('socket.io');
// hold cookieParser and sessionStore for SessionSocket
var cookieParser = express.cookieParser('your secret sauce'),
sessionStore = new connect.middleware.session.MemoryStore();
// create express server
var app = express();
// config express server
require('./config/express')(app, config, cookieParser, sessionStore);
// Express3 requires a http.Server to attach socke.io
var server = http.createServer(app);
// attach socket.io
var sio = io.listen(server);
sio.set('log level', 2);
// create SessionSocket
var SessionSockets = require('session.socket.io'),
sessionSockets = new SessionSockets(sio, sessionStore, cookieParser);
// setup SessionSocket
sessionSockets.on('connection', function(err, socket, session) {
socket.join(session.user._id);
socket.emit('message', {
title: "welcome",
msg: "welcome to selink"
});
});
// config express server route
app.get('/some-action', **SomeMongooseFunction**);
// start server
server.listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});在快速路由处理程序(“SomeMongooseFunction”,在其他文件中定义)中,经过处理后的用户操作(查询、修改DB等),我希望向用户或其他在线用户发送实时通知。所以我想我必须把"sio“对象传递到"SomeMongooseFunction”中,上面的例子只有一条路,但实际上我有几十条路,如果我这样做的话,看起来会很难看。
或者在安装SessionSocket部分,我认为可以将sio粘贴到用户的会话中。但是,我不确定这样做是否正确。
那么,在快递处理程序中是否还有其他获取sio参考的方法?(如果我能像一个全局变量一样引用sio,但全局是邪恶的.)
谢谢你的建议。
发布于 2014-02-14 13:02:26
您正在将user ID从会话存储到Socket.IO房间管理器中。现在您已经以某种方式获取了目标的用户ID,并为该用户发送了事件消息。
对于您的情况,您使用的是notification实体,因此让我们这样做:
//client side - send a notification for a specific user.
var note = {
from: userID, //sender
target: id, //receiver
type: type //type of notification
}
socket.emit('notification', note);target字段是目标用户ID,此用户将收到通知状态。这里的type只是为了说明如果您想要处理多个类型的通知。socket.emit('notification', note);这一部分是最重要的部分。它将向通知事件发送note对象。此事件必须在您的服务器端Socket.IO页面上注册;
//server side - receive JSON data on notification event
socket.on('notification', function(data) {
io.sockets.in(data.target).emit('notification', data);
});注意:我用'io‘代替'sio’。
notification事件被注册,并将捕获指向它的所有客户端消息。data是我们以前发送的JSON对象,所以io.sockets.in().emit()
再一次对客户说。我们必须捕获所有的notification事件。
//client side - the final destination
socket.on('notification', function(data) {
//DO SOME JQUERY STUFF TO ALERT THIS TARGET USER FROM THE MESSAGE RECEIVED.
console.log("User: " + data.from + " sent you this notification");
});我们可以得出的结论是:
在任何情况下,您都可以使用这个类推,为特定用户发送Socket.IO消息。
https://stackoverflow.com/questions/21770174
复制相似问题