我正在尝试获取当前连接的所有套接字/客户端的列表.
io.sockets 遗憾的是,它没有返回数组.
我知道我可以使用数组保留自己的列表,但不要认为这是一个最佳解决方案有两个原因:
冗余.Socket.IO已经保留了此列表的副本.
Socket.IO提供了为客户端设置任意字段值的方法(即:),socket.set('nickname', 'superman')所以如果我要维护自己的列表,我需要跟上这些变化.
救命?
我只想将一些变量附加到我的套接字,但我不理解.get和.set方法.他们都有回调的第三个参数.这可以省略吗?它的用途是什么?!回调本身是否会引发争论?
我最好的猜测是,当socket.io没有使用内存存储但是在其他地方保存这些东西并且需要检查回调时出错.
socket.on('set nickname', function (name) {
socket.set('nickname', name, function (arguments) {
doSomethingMysterious();
});
Run Code Online (Sandbox Code Playgroud)
我正在使用socket.io 0.9.x.
该函数在socket.js中定义
/**
* Stores data for the client.
*
* @api public
*/
Socket.prototype.set = function (key, value, fn) {
this.store.set(key, value, fn);
return this;
};
Run Code Online (Sandbox Code Playgroud) 我完成sessionStore了MongoStore正确执行每个登录,并且会话正在被写入数据库而没有错误.我正在使用这个软件包github.com/jfromaniello/passport.socketio将护照与套接字io对齐,但我已经找了几个关于登录后如何处理的地方,sessionStorage因此它列出了哪些用户名字在线和离线,可以告诉我这个吗?
app.js
var express = require('express');
var mongoose = require('mongoose');
var path = require('path');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var session = require('express-session');
const MongoStore = require('connect-mongo')(session);
var flash = require('connect-flash');
var logger = require('morgan');
var passport = require('passport');
var passportSetup = require('./passport-setup');
// import routes
var routes = require('./routes');
// setup express app
var app = express();
app.use(logger());
// setup connection with mongodb
mongoose.connect( process.env.MONGODB_URI || "mongodb://smachs:***@d***.mlab.com:****/****-messenger",
(err, …Run Code Online (Sandbox Code Playgroud) 这是2个相关问题.将它们放在一起更有意义.
问题1
我有一个node.js应用程序,它向所有客户端发出一个事件,所有当前客户端都会响应一个readyemit.如何创建回复初始发射的所有客户端的列表,以及可以使用哪种标识来区分客户端?
问题2:
收集连接客户端列表后我要做的是,然后访问一个N行数的MySQL数据库表并分配每个客户端X行.这些行将被发回给各自的客户端.如何才能做到这一点?
Qn 1的当前代码
节点代码
setInterval(function() {
util.log('Checking for new jobs...');
dbCheckQueue(function(results) { // checks if there are new rows to "distribute" to clients
if (results.length) {
util.log(results.length + ' new jobs found.');
io.sockets.emit('job_available');
}
});
}, 10*1000);
Run Code Online (Sandbox Code Playgroud)
客户端JS代码
socket.on('job_available', function() {
console.log('Job Available.. Responding with Ready!');
socket.emit('ready');
});
io.sockets.on('connection', function(socket) {
socket.on('ready', function() {
// UPDATE N rows with client_id in column checkout.
// Then SELECTS * from table where …Run Code Online (Sandbox Code Playgroud) io.sockets.on('connection', function(socket) {
socket.object = socket.id;
socket.on('updateObject', function(data) {
// How to update socket.object here for all clients?
});
});
Run Code Online (Sandbox Code Playgroud)
怎么做?