PDA

View Full Version : با خبر شدن طرف دوم چت از این که متن به او اراسال شده؟؟



H:Shojaei
سه شنبه 27 آبان 1393, 11:02 صبح
سلام...
سوال اصلی...
توی چت چطور طرف دوم بفهمه که یه نفر یه چت رو با اون باز کرده و یه متنی ارسال کرده؟
توضیحات...
تو حالت عادی تا وقتی کاربری با کانکت شدن از طریق port مربوطه که تو فایل سمت سرور (مثلا app.js) ست شده به سرور وصل نشه (در سوکت و node.js) سوکت اون طرف رو نداریم حالا این قضیه وقتی پیش میاد که یه نفر چت رو با یه نفر دیگه باز کنه که نفر دوم کاری نکرده و سوکتش رو هم نداریم که بتونیم بهش چیزی بگیم در حقیقت هیچ دسترسی نداریم بهش...
حالا چطور به این نفر دوم بفهمونیم که آقا یه نفر چت رو باهات باز کرده و متنی هم ارسال کرده؟؟
یه روشش که به ذهن خودم میرسه استفاده از set_timeout هست که مثلا کاربر1 که با کاربر2 چت رو ایجاد میکنه تو یه جدول که یه سطرش مربوط به کاربر2 هست یه چیزی درج بشه و هر 3 ثانیه جدول مربوط به کاربر2 با $.ajax چک بشه و اگر مقداری داشت بفهمیم که بله یه نفر با کاربر2 میخواد بچته...
این درسته یا راه دیگه و 100 البته بهتر با سوکت و node.js داره که هر 3 ثانیه بار اضافی رو سرور متحمل نشه؟؟
ممنون

cups_of_java
سه شنبه 27 آبان 1393, 15:03 عصر
توی چت چطور طرف دوم بفهمه که یه نفر یه چت رو با اون باز کرده و یه متنی ارسال کرده؟

به ازای هر عمل مورد نظرت که میخوای به دیگران انتقالش بدی یه رویداد امیت کن رو سوکت و در طرف دیگه بخونش و نمایش بده پیام رو
مثلن چت رو که باز کرد با جاوا اسکریپت رویداد باز شدن پینچره رو بفرست رو سوکت و بعد در هر جا که برات مهمه بگیرش و بگو فلانی پنچره رو باز کرد




یه روشش که به ذهن خودم میرسه استفاده از set_timeout هست که مثلا کاربر1 که با کاربر2 چت رو ایجاد میکنه تو یه جدول که یه سطرش مربوط به کاربر2 هست یه چیزی درج بشه و هر 3 ثانیه جدول مربوط به کاربر2 با $.ajax چک بشه و اگر مقداری داشت بفهمیم که بله یه نفر با کاربر2 میخواد بچته...

شما داری از سوکت-آی-او استفاده میکنی که دیگه اینکارا رو نکنی. نیازی به Polling نداری. همونطور که بالا گفتم می تونی عمل کنی.

H:Shojaei
سه شنبه 27 آبان 1393, 16:37 عصر
به ازای هر عمل مورد نظرت که میخوای به دیگران انتقالش بدی یه رویداد امیت کن رو سوکت و در طرف دیگه بخونش و نمایش بده پیام رو
مثلن چت رو که باز کرد با جاوا اسکریپت رویداد باز شدن پینچره رو بفرست رو سوکت و بعد در هر جا که برات مهمه بگیرش و بگو فلانی پنچره رو باز کرد

شما داری از سوکت-آی-او استفاده میکنی که دیگه اینکارا رو نکنی. نیازی به Polling نداری. همونطور که بالا گفتم می تونی عمل کنی.
بازم ممنون...
خوب بله من هم میخوام همین کار رو انجام بدم ولی مساله اینه که چطور به یه کاربر مشخص بفهمونم که فلانی چت رو باز کرده و میخواد با شما بچته؟
مثلا 3 نفر تو سایت آنلاینن
نفر اول روی اسم نفر دوم کلیک میکنه و میخواد باهاش چت کنه کادر مربوطه باز میشه که پیامو بفرسته و پیام رو میفرسته...
حالا چطور اون نفر دومه بفهمه که نفر اول میخواد باهاش چت کنه و پیام واسه اون ارسال شده!! اینی که شما میگید اینطوریه که وقتی امیت شد به همه کاربرا میره حالا چطور به همون کاربر خواص بره این پیام!؟؟
البته این میشه که وقتی چت میخواد شروع بشه نام کاربری طرفی که میخواد باهاش چت بشه هم بره سمت سرور و به همه امیت بشه بعد سمت کلاینتهایی که آنلاین هستن نام کاربری مال هرکدوم بود همون باخبر بشه که چت باز شده مال اونه...
اینی که گفتم میشه؟؟ روشش همینه؟

H:Shojaei
چهارشنبه 28 آبان 1393, 01:00 صبح
یه سوال کلی این که چطور کاربر رو به محض این که آنلاین شد به سرور واسه چت وصلش کنیم؟؟ که سمت کلایتنش منتظر هر واکنشی از سرور باشه (که یکیش میتونه همون که یه نفر باهاش چتو باز کنه باشه...)

cups_of_java
چهارشنبه 28 آبان 1393, 01:36 صبح
سوکت آی او از Websockets پشتیابی میکنه و از همین طریق ارتباط دو طرفه بین مرورگر و سرور برقرار میشه و شما از هر دو سمت می تونید رویداد بفرستید.

دوست عزیز شما باید بیشتر سوکت آی او رو مطالعه کنی و یک مثال کامل باهاش بنویسی اول... جواب سوالات رو عملی پیدا میکنی.
اون لینک هایی که من بهت دادم همه چیز توش هست.

543310
پنج شنبه 29 آبان 1393, 18:14 عصر
کد سمت سرور :

socket.on('seen',function (users){
var u = users.split("_");
var sid = u[0];
var rid = u[1];
Messages.update(
{ users: users , seen: 0 },
{ $set: { seen: 1 }},
{ multi: true },
callback
);
function callback (err, num) {
if(num > 0)
{
var data = {sid:sid , rid:rid};
io.sockets.emit('seen',data);
}
}
});


کد سمت کلاینت :


$('.private').on('click','div', function(){
var si = $(this).data('id');
var ri = sid;
var users = si + '_' + ri;
socket.emit('seen',users);
});
socket.on('seen',function (data){
if(sid == data.sid)
{
alert("Seen");
}
});

H:Shojaei
پنج شنبه 29 آبان 1393, 19:44 عصر
کد سمت سرور :

socket.on('seen',function (users){
var u = users.split("_");
var sid = u[0];
var rid = u[1];
Messages.update(
{ users: users , seen: 0 },
{ $set: { seen: 1 }},
{ multi: true },
callback
);
function callback (err, num) {
if(num > 0)
{
var data = {sid:sid , rid:rid};
io.sockets.emit('seen',data);
}
}
});


کد سمت کلاینت :


$('.private').on('click','div', function(){
var si = $(this).data('id');
var ri = sid;
var users = si + '_' + ri;
socket.emit('seen',users);
});
socket.on('seen',function (data){
if(sid == data.sid)
{
alert("Seen");
}
});


ممنون میشم اگه یکم توضیح بدین...
مثلا Message.update از توابع خود نود هست؟؟

543310
پنج شنبه 29 آبان 1393, 20:20 عصر
نه دوست عزیز اون تیکه برای اتصال به دیتابیس (mongodb) هستش...

543310
پنج شنبه 29 آبان 1393, 20:25 عصر
ممنون میشم اگه یکم توضیح بدین...
مثلا Message.update از توابع خود نود هست؟؟

نه دوست عزیز اون تیکه برای اتصال به دیتابیس (mongodb) هستش...
این کد بخشی از برنامه چتیه که قبلا نوشتم میتونی تو لینک زیر ببینی :
http://31.220.49.177:54331/

H:Shojaei
پنج شنبه 29 آبان 1393, 22:45 عصر
ممنون خیلی کمک کرد