【发布时间】:2014-05-29 02:20:56
【问题描述】:
我们在 Ubuntu 12.04 的堆栈中使用 node js、redis、php 和 mysql。 这是一个内部应用程序,我们正在努力让实时通知正常工作。
有很多代码,让我确切地知道你想看哪些部分 - 我会发布它们。
这是我所在的位置: 每当用户登录时,都会触发节点索引文件 (app.js) 并将用户的 id、会话 id、套接字 id 和其他几个变量放入一个对象中并使用 redis-server 作为活动连接的数据存储。当客户端注销或关闭浏览器时,连接将从数据存储中删除。这是 & 一直在相应地发挥作用。
问题出在: Cron 调用:
/var/www/node node notifications.js
Notifications.js 进行 sql 查询,然后需要发送任何等待的未决消息。 Notifications.js 可以访问 redis 并获取存储的客户端 websocket 连接信息。 所以此时,我有要发送的消息、用户的 id、(php) 会话 id 和 WebSocket ID。
我无法将消息发送回客户端,因为 socket.io ws 连接对象没有连接。
我已经在应用中导出了对象
/* Include Default & Mandatory Modules */
var http = require('http')
, server = http.createServer().listen(3000)
, socketio = require('socket.io')
, socketioWildcard = require( 'socket.io-wildcard' )
, io = socketioWildcard( socketio ).listen(server)
, redis = require('redis')
, rclient = redis.createClient()
, util = require('util');
/* Export to other modules */
exports.socketio = io.sockets;
在其他节点库中,由浏览器事件调用/触发 - 我可以简单地
require(./app.js);
并像这样使用:
app.socketio.sockets[ app.socket_id ].emit('log.user.out',{'err':true,'msg':'You have been logged ....'});
当我有适当的 WebSocket ID 但浏览器没有创建事件时,我需要在 Notification.js 模块中进行哪些更改才能将事件发送到浏览器?
感谢大家的帮助。
【问题讨论】:
标签: node.js websocket socket.io