با خبر شدن طرف دوم چت از این که متن به او اراسال شده؟؟
سلام...
سوال اصلی...
توی چت چطور طرف دوم بفهمه که یه نفر یه چت رو با اون باز کرده و یه متنی ارسال کرده؟
توضیحات...
تو حالت عادی تا وقتی کاربری با کانکت شدن از طریق port مربوطه که تو فایل سمت سرور (مثلا app.js) ست شده به سرور وصل نشه (در سوکت و node.js) سوکت اون طرف رو نداریم حالا این قضیه وقتی پیش میاد که یه نفر چت رو با یه نفر دیگه باز کنه که نفر دوم کاری نکرده و سوکتش رو هم نداریم که بتونیم بهش چیزی بگیم در حقیقت هیچ دسترسی نداریم بهش...
حالا چطور به این نفر دوم بفهمونیم که آقا یه نفر چت رو باهات باز کرده و متنی هم ارسال کرده؟؟
یه روشش که به ذهن خودم میرسه استفاده از set_timeout هست که مثلا کاربر1 که با کاربر2 چت رو ایجاد میکنه تو یه جدول که یه سطرش مربوط به کاربر2 هست یه چیزی درج بشه و هر 3 ثانیه جدول مربوط به کاربر2 با $.ajax چک بشه و اگر مقداری داشت بفهمیم که بله یه نفر با کاربر2 میخواد بچته...
این درسته یا راه دیگه و 100 البته بهتر با سوکت و node.js داره که هر 3 ثانیه بار اضافی رو سرور متحمل نشه؟؟
ممنون
نقل قول: با خبر شدن طرف دوم چت از این که متن به او اراسال شده؟؟
نقل قول:
توی چت چطور طرف دوم بفهمه که یه نفر یه چت رو با اون باز کرده و یه متنی ارسال کرده؟
به ازای هر عمل مورد نظرت که میخوای به دیگران انتقالش بدی یه رویداد امیت کن رو سوکت و در طرف دیگه بخونش و نمایش بده پیام رو
مثلن چت رو که باز کرد با جاوا اسکریپت رویداد باز شدن پینچره رو بفرست رو سوکت و بعد در هر جا که برات مهمه بگیرش و بگو فلانی پنچره رو باز کرد
نقل قول:
یه روشش که به ذهن خودم میرسه استفاده از set_timeout هست که مثلا کاربر1 که با کاربر2 چت رو ایجاد میکنه تو یه جدول که یه سطرش مربوط به کاربر2 هست یه چیزی درج بشه و هر 3 ثانیه جدول مربوط به کاربر2 با $.ajax چک بشه و اگر مقداری داشت بفهمیم که بله یه نفر با کاربر2 میخواد بچته...
شما داری از سوکت-آی-او استفاده میکنی که دیگه اینکارا رو نکنی. نیازی به Polling نداری. همونطور که بالا گفتم می تونی عمل کنی.
نقل قول: با خبر شدن طرف دوم چت از این که متن به او اراسال شده؟؟
نقل قول:
نوشته شده توسط
cups_of_java
به ازای هر عمل مورد نظرت که میخوای به دیگران انتقالش بدی یه رویداد امیت کن رو سوکت و در طرف دیگه بخونش و نمایش بده پیام رو
مثلن چت رو که باز کرد با جاوا اسکریپت رویداد باز شدن پینچره رو بفرست رو سوکت و بعد در هر جا که برات مهمه بگیرش و بگو فلانی پنچره رو باز کرد
شما داری از سوکت-آی-او استفاده میکنی که دیگه اینکارا رو نکنی. نیازی به Polling نداری. همونطور که بالا گفتم می تونی عمل کنی.
بازم ممنون...
خوب بله من هم میخوام همین کار رو انجام بدم ولی مساله اینه که چطور به یه کاربر مشخص بفهمونم که فلانی چت رو باز کرده و میخواد با شما بچته؟
مثلا 3 نفر تو سایت آنلاینن
نفر اول روی اسم نفر دوم کلیک میکنه و میخواد باهاش چت کنه کادر مربوطه باز میشه که پیامو بفرسته و پیام رو میفرسته...
حالا چطور اون نفر دومه بفهمه که نفر اول میخواد باهاش چت کنه و پیام واسه اون ارسال شده!! اینی که شما میگید اینطوریه که وقتی امیت شد به همه کاربرا میره حالا چطور به همون کاربر خواص بره این پیام!؟؟
البته این میشه که وقتی چت میخواد شروع بشه نام کاربری طرفی که میخواد باهاش چت بشه هم بره سمت سرور و به همه امیت بشه بعد سمت کلاینتهایی که آنلاین هستن نام کاربری مال هرکدوم بود همون باخبر بشه که چت باز شده مال اونه...
اینی که گفتم میشه؟؟ روشش همینه؟
نقل قول: با خبر شدن طرف دوم چت از این که متن به او اراسال شده؟؟
یه سوال کلی این که چطور کاربر رو به محض این که آنلاین شد به سرور واسه چت وصلش کنیم؟؟ که سمت کلایتنش منتظر هر واکنشی از سرور باشه (که یکیش میتونه همون که یه نفر باهاش چتو باز کنه باشه...)
نقل قول: با خبر شدن طرف دوم چت از این که متن به او اراسال شده؟؟
سوکت آی او از Websockets پشتیابی میکنه و از همین طریق ارتباط دو طرفه بین مرورگر و سرور برقرار میشه و شما از هر دو سمت می تونید رویداد بفرستید.
دوست عزیز شما باید بیشتر سوکت آی او رو مطالعه کنی و یک مثال کامل باهاش بنویسی اول... جواب سوالات رو عملی پیدا میکنی.
اون لینک هایی که من بهت دادم همه چیز توش هست.
نقل قول: با خبر شدن طرف دوم چت از این که متن به او اراسال شده؟؟
کد سمت سرور :
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");
}
});
نقل قول: با خبر شدن طرف دوم چت از این که متن به او اراسال شده؟؟
نقل قول:
نوشته شده توسط
543310
کد سمت سرور :
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 از توابع خود نود هست؟؟
نقل قول: با خبر شدن طرف دوم چت از این که متن به او اراسال شده؟؟
نه دوست عزیز اون تیکه برای اتصال به دیتابیس (mongodb) هستش...
نقل قول: با خبر شدن طرف دوم چت از این که متن به او اراسال شده؟؟
نقل قول:
نوشته شده توسط
H:Shojaei
ممنون میشم اگه یکم توضیح بدین...
مثلا Message.update از توابع خود نود هست؟؟
نه دوست عزیز اون تیکه برای اتصال به دیتابیس (mongodb) هستش...
این کد بخشی از برنامه چتیه که قبلا نوشتم میتونی تو لینک زیر ببینی :
http://31.220.49.177:54331/
نقل قول: با خبر شدن طرف دوم چت از این که متن به او اراسال شده؟؟