var clients = [];
io.sockets.on('connection', function (socket) {
clients.push(socket.id);
});
var clients = [];
io.sockets.on('connection', function (socket) {
socket.on("nickName", function (nickName) {
clients.push({
nickName: nickName,
socketId: socket.id
});
})
});
if (io.sockets.connected[socketId]) {
io.sockets.connected[socketId].emit('message', 'Hey to :), inja ro bebin ;)');
}
سلام دوستان. فرض کنید ما یه چت راه انداختیم که کاربرا توش ثبت نام و لاگین میکنن. من مشکلم اینه نمیتونم درست بفهمم چطور میتونم به یه کاربر خاص پیام بفرستم. فرض کنید هزار نفر الان آنلاین هستن به یه کاربر خاصی یه کاربر دیگه به صورت خصوصی مثلا میخواد پیام بفرسته یا خود ما بخواییم به یه کاربر خاص شخصا اطلاع رسانی کنیم مثل همین نرم افزارهای شبکه های اجتماعی. این روالش به چه صورت؟ چطور میتونیم یه کاربر رو مخاطب قرار بدیم و براش ارسالی داشته باشیم؟
--
You received this message because you are subscribed to the Google Groups "nodejs-fa" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nodejs-fa+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
“Be the change that you wish to see in the world.”― Mahatma Gandhi
این یه مثال خیلی ساده بود و خب قاعدتا تو مقیاس بزرگ خیلی زمانبره، معمولا اینجور موقعها از یه دیتابیس in memory مثل redis استفاده می کنند و کانکشنها رو تو اون نگه می دارد که برای سرچم سریع باشه. تو اینترنت پیاده سازی هاشو راحت پیدا می کنید.
این سرچ تو آرایه زمان بر نیست که بخواییم کاربر رو پیدا کنیم؟ منظورم نام کاربری هستش
--
اره درسته حق باشماست ولی مثال خوبی ارایه کردید به این نوع مثال خیلی احتیاج داشتم ممنون.
تو این مثال شما. ساکت آی دی ها یا نیک نیم ها فقط تو دیتابیس هایی مثل redisذخیره میشن دیگه درسته؟
آره تقریبا
اره درسته حق باشماست ولی مثال خوبی ارایه کردید به این نوع مثال خیلی احتیاج داشتم ممنون.
تو این مثال شما. ساکت آی دی ها یا نیک نیم ها فقط تو دیتابیس هایی مثل redisذخیره میشن دیگه درسته؟
--
var redis = require('redis');
var redisClient = redis.createClient(); //creates a new client
io.sockets.on('connection', function (socket) {
socket.on("nickName", function (nickName) {
redisClient.set([nickName, socket.id]);
})
});
//send message to arastu
redisClient.get('arastu', function(err, socketId) {
if (io.sockets.connected[socketId]) {
io.sockets.connected[socketId].emit('message', 'Hey to :), inja ro bebin ;)');
}
});
تقریبا؟ منظورتون چی هستش؟ یه نمونه میشه بگید بدونم؟
--
You received this message because you are subscribed to the Google Groups "nodejs-fa" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nodejs-fa+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
var redis = require('redis');
var redisClient = redis.createClient(); //creates a new client
io.sockets.on('connection', function (socket) {
socket.on("nickName", function (nickName) {
redisClient.set([nickName, socket.id]);
})
});
//send message to arastu
redisClient.get('arastu', function(err, socketId) {
if (io.sockets.connected[socketId]) {
io.sockets.connected[socketId].emit('message', 'Hey to :), inja ro bebin ;)');
}
});
دستت درد نکنه.عالی بود ممنون
دستت درد نکنه.عالی بود ممنون
--
You received this message because you are subscribed to the Google Groups "nodejs-fa" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nodejs-fa+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "nodejs-fa" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nodejs-fa+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
io.sockets.on('connection', function (socket) {
socket.on("nickName", function (nickName) {
اولی callback مربوط به event کانکشن همه سوکتهاست، دومی callback مربوط به ارسال nickname در یک سوکت خاص است.
نکته اینه که به ازای هر کانکشن مربوط به سوکت ها یک کالبک اجرا میشه که argumentش یه آبجکته که مپ شده به همون سوکت، حالا ما رو همه سوکت ها به ایونت مربوط به ارسال نام مستعار هم گوش می دیم و براش callback ست میکنیم.
اهان الان متوجه شدم حواسم نبود فکر کردم به ازای هر کودومش کانکشن رو دوباره مینویسیم.ممنون
socket.on('userConnected', function (data) {
redisClient.set([data.username, socket.id]);
});
socket.on('userConnected', function (data) {
client.keys(data.username, function (err, keys) {
if (err) return;
if (keys.length === 0)
redisClient.set([data.username, socket.id]);
else {
redisClient.del(data.username);
redisClient.set([data.username, socket.id]);
}
});
});اول میگردم اگه قبلا ست شده باشه پاکش میکنم بعد دوباره ست میکنم