PDA

View Full Version : یاهو مسنجر



yavari
شنبه 29 اردیبهشت 1386, 09:17 صبح
سلام

آیا یاهو مسنجر با استفاده از تایمر لیست افراد آنلاینو تشخیص میده و مسجا رو میفرسته ؟
در کل سوالم اینه :
بهترین راه برای اینکار چیه ؟ (در ضمن منطق برنامه Client/Server من Remoting هست )
بیام از تایمر استفاده کنم
یا اینکه

Try
AddHandler Me.theManager.evtReceiveText, AddressOf Me.HandleReceivedMsg
Catch e1 As Exception
MessageBox.Show(e1.Message)
End Try
وقتی 100 ها کلاینت به Server وصل بشن چی ؟ مشکلی پیش نمیاد ؟؟؟

ممنون میشم دوستان نظراشونو ارائه کنن !

با احترام

ealireza
شنبه 29 اردیبهشت 1386, 09:55 صبح
سلام

آیا یاهو مسنجر با استفاده از تایمر لیست افراد آنلاینو تشخیص میده و مسجا رو میفرسته ؟
در کل سوالم اینه :
بهترین راه برای اینکار چیه ؟ (در ضمن منطق برنامه Client/Server من Remoting هست )
بیام از تایمر استفاده کنم
یا اینکه

Try
AddHandler Me.theManager.evtReceiveText, AddressOf Me.HandleReceivedMsg
Catch e1 As Exception
MessageBox.Show(e1.Message)
End Try
وقتی 100 ها کلاینت به Server وصل بشن چی ؟ مشکلی پیش نمیاد ؟؟؟

ممنون میشم دوستان نظراشونو ارائه کنن !

با احترام
دوست من یاهو مالتی ترد هست
یعنی دی یک ترد این کار لسنر را انجام میده (به قول شما تایمر)
و در ترد های دیگه
کار ارسال و پیام رو

این کار روی کلاینت انجام میشه
پس رو سرور فشار کمتری خواهیم داشت
در ضمن بستگی به پروتوکلت هم داره

اگر از ASP.net میخای استفاده کنی
که با AJAX میتونی این کارو انجام بده

موفق باشید

manager
شنبه 29 اردیبهشت 1386, 10:01 صبح
دوست من یاهو مالتی ترد هست
یعنی دی یک ترد این کار لسنر را انجام میده (به قول شما تایمر)
و در ترد های دیگه
کار ارسال و پیام رو

این کار روی کلاینت انجام میشه
پس رو سرور فشار کمتری خواهیم داشت
در ضمن بستگی به پروتوکلت هم داره

اگر از ASP.net میخای استفاده کنی
که با AJAX میتونی این کارو انجام بده


ربطی به جواب دوستمون نداره

yavari
شنبه 29 اردیبهشت 1386, 10:27 صبح
سلام
(از پروتکل HTTP استفاده میکنم)
یعنی اینجوری ...
حالت 1 : کلاینت مدام سرور رو چک کنه برای افراد آنلاین و آخرین مسجهای فرستاده شده ! (با تایمر ؟؟؟)
حالت 2 : کلاینت هنگام فرستادن مسج یه فانکشن راه دور رو صدا بزنه ! (Handler ؟؟؟)

اینجوریه ؟؟؟...

ممنون از توجه تون

manager
شنبه 29 اردیبهشت 1386, 14:47 عصر
سلام
(از پروتکل HTTP استفاده میکنم)
یعنی اینجوری ...
حالت 1 : کلاینت مدام سرور رو چک کنه برای افراد آنلاین و آخرین مسجهای فرستاده شده ! (با تایمر ؟؟؟)
حالت 2 : کلاینت هنگام فرستادن مسج یه فانکشن راه دور رو صدا بزنه ! (Handler ؟؟؟)

اینجوریه ؟؟؟...

ممنون از توجه تون
حالت 1 : چون سرور به کلاینت ها دسترسی نداره (تو اینترنت ) پس نمی تونه هیچ Eventای رو بر روی Client فراخونی کنه پس این راه حل منطقی و مناسبه !
حالت 2: اگر با Remoting کار می کنی پس ناچارا از این روش داری استفاده می کنی. مگر اینکه منظورت این بوده باشه که سرور در هنگام دریافت پیغام یک فانکشن بر روی کلاینت رو فراخونی بکنه که همون طور که براتون تشریح کردم این مار امکان پذیر نیست.
باز هم من می گردم ببینم چه Solutionای برای این کار وجود داره ....

mehrzad007
شنبه 29 اردیبهشت 1386, 21:25 عصر
به نظر من می تونی یه کاری بکنی :
یکی لاگین میشه به سیستم و لیست رو از سرور می گیره بعد به تمام لیست حضور خودشو اعلام می کنه و لیست تمام اونایی که تو لیستش هستن رو رفرش می کنه.
یا می تونی بدی به سرور و از وان بخوایی که این کار رو بکنه .
توی راه اولی یه کمی امنیت می اد پایین
اما توی دومی سرور اذیت میشه .
یعنی بیشتر به رویداد سعی کن فکر کنی تا تایمر اون جالب نیست خیلی . هم زمان سرور رو می گیره هم سرعت سیستم لوکال.

manager
شنبه 29 اردیبهشت 1386, 22:01 عصر
به نظر من می تونی یه کاری بکنی :
یکی لاگین میشه به سیستم و لیست رو از سرور می گیره بعد به تمام لیست حضور خودشو اعلام می کنه و لیست تمام اونایی که تو لیستش هستن رو رفرش می کنه.
یا می تونی بدی به سرور و از وان بخوایی که این کار رو بکنه .
توی راه اولی یه کمی امنیت می اد پایین
اما توی دومی سرور اذیت میشه .
یعنی بیشتر به رویداد سعی کن فکر کنی تا تایمر اون جالب نیست خیلی . هم زمان سرور رو می گیره هم سرعت سیستم لوکال.
احتمالا شما مطلع هستید که این دوست ما یک Messenger برای Internet می خواد نه یک Intranet ??

mehrzad007
یک شنبه 30 اردیبهشت 1386, 07:01 صبح
احتمالا شما مطلع هستید که این دوست ما یک Messenger برای Internet می خواد نه یک Intranet ??
فکر می کنم . منظور؟

حالت 1 : کلاینت مدام سرور رو چک کنه برای افراد آنلاین و آخرین مسجهای فرستاده شده ! (با تایمر ؟؟؟)



حالت 1 : چون سرور به کلاینت ها دسترسی نداره (تو اینترنت ) پس نمی تونه هیچ Eventای رو بر روی Client فراخونی کنه پس این راه حل منطقی و مناسبه !

این سرور به چند تا درخواست همزمان می تونه جواب بده ؟
بعد اون تایمر هر چند وقت یک بار میخواد چک کنه؟ زود؟ دیر؟ چه اتفاقی می افته؟ مثلا فرض کن برنامه بخواد هر 10 ثانیه یک بار چک کنه. دیرتر از این دیگه غیر منطقیه (یاهو رو اگه دقت کرده باشید به محض ورود بهتون خبر می ده) حالا شما فرض کن صد تا کاربر انلاین باشن چه اتفاقی می افته؟ در عرض یک دقیقه 600 بار باید به سرور مراجعه بشه حالا اینا بشن هزار یا دهزار خداحافظ سرور....

Hossein_R
یک شنبه 30 اردیبهشت 1386, 13:10 عصر
حقیقتا من به تحقیق نمیدونم که یاهو چطور افراد آنلاین و آفلاین رو تشخیص میده ولی چیزی که احساس میکنم اینه که وقتی یه نفر logaout میکنه از لیست حذف میشه و اگه این کار رو نکنه توی لیست برای مدت مدیدی میمونه ، مثالا برای همه مون پیش اومده که روی DC شدیم و دوستان شاکی بودند که چرا جوابشون رو ندادیم !

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

manager
دوشنبه 31 اردیبهشت 1386, 13:12 عصر
به نظر من می تونی یه کاری بکنی :
یکی لاگین میشه به سیستم و لیست رو از سرور می گیره بعد به تمام لیست حضور خودشو اعلام می کنه و لیست تمام اونایی که تو لیستش هستن رو رفرش می کنه.
یا می تونی بدی به سرور و از وان بخوایی که این کار رو بکنه .

البته این برای مرحله ی بعد ! و اگر بخواد یک Chatroom درست کنه می تونه در موردش بحث بشه.


یعنی بیشتر به رویداد سعی کن فکر کنی تا تایمر اون جالب نیست خیلی . هم زمان سرور رو می گیره هم سرعت سیستم لوکال.
بسته به نوع ابزار و امکانات داره. مثلا اگر با Web App بخوایم پیاده سازی کنیم مجبوریم از روش timer استفاده کنیم و اگر بخوایم از win app و remoting و .. استفاده کنیم می تونیم از روش دوم استفاده کنیم. البته من هم مثل شما با روش اول موافق نیستم و دارم یه مثال حاضر می کنم برای این دوستمون که مشکلش با روش دوم حل بشه.

mehrzad007
دوشنبه 31 اردیبهشت 1386, 13:25 عصر
یه دو سه نفر هستند که در این مورد کار کردند:
1- عباس عریضی : مسنجر کیمیا از بچه های این سایت هستند . الان یه چند وقته نیستش
مسنجر ایشون کامله و داره کار می کنه الان رو البته خبر ندارم
2- blackdal ایشون هم همینطور یه مثال تو وبلاگشون دیدم
3- پالیز سافت ور ایشون هم ایضا
کار اینا رو ببین بد نیست یه کم راه دستت می آد. بعد یه سری هم بزن به سورس فورگ اونجا هم چند IM اپن سورس من دیدم.

yavari
دوشنبه 31 اردیبهشت 1386, 14:12 عصر
سلام

استفاده از تایمر که اصلا برام معقول نیست !
اما فعلا تا آی پی کلاینتمو نداشته باشم کانال برا سرور مشخص نمیشه !
ممکنه سرور یاهو مسنجر همین که ما لاگین می کنیم آی پی هائی در یه رنج خاصی به کلاینتاش اختصاص بده ؟؟؟ :متفکر:
یا اینکه از همون ساختار NAT ، درخواست استفاده میکنه برا پاسخ به کلاینتا ؟؟؟ :متفکر:
یا ...

ممنون از توجه دوستان

manager
دوشنبه 31 اردیبهشت 1386, 14:35 عصر
سلام

استفاده از تایمر که اصلا برام معقول نیست !
اما فعلا تا آی پی کلاینتمو نداشته باشم کانال برا سرور مشخص نمیشه !
ممکنه سرور یاهو مسنجر همین که ما لاگین می کنیم آی پی هائی در یه رنج خاصی به کلاینتاش اختصاص بده ؟؟؟ :متفکر:
یا اینکه از همون ساختار NAT ، درخواست استفاده میکنه برا پاسخ به کلاینتا ؟؟؟ :متفکر:
یا ...

ممنون از توجه دوستان
نه، شما احتیاجی به دانستن IP کلاینت بر روی سرور ندارید. وقتی کلاینت Connect شد شما درخواست اتصال رو accept می کنید و سپس همان طور connect باقی می مانید. هر وقت هم لازم شد به همون IP دریافت شده (که به ظاهر مربوط به کلاینت است) packet بفرستید.

yavari
دوشنبه 31 اردیبهشت 1386, 15:03 عصر
سلام


هر وقت هم لازم شد به همون IP دریافت شده (که به ظاهر مربوط به کلاینت است) packet بفرستید.


میشه واضح تر منظورتونو بگید !

ممنون