PDA

View Full Version : گفتگو: محیط چت تحت پی اچ پی با آجاکس



mahmood3d
پنج شنبه 30 مهر 1388, 09:17 صبح
سلام دوستان
من دارم روی یک پروژه محیط چت تحت وب کار می کنم و می خوام یک محیط چت با یک سری امکانات بیشتر طراحی کنم. برای اینکه نشینم همه برنامه نویسی رو انجام بدم اومدم یک برنامه آماده چت رو از اینترنت دریافت کردم که تغییرات دیگه رو روی این انجام بدم. محیط این برنامه مثل محیط سایت meebo هستش (البته در وسعت کوچیک یعنی تمام امکانات اون رو نداره) اونایی که با این سایت کار کردن می دونن چه امکاناتی داشت. :چشمک:
حالا چند تا سؤال اینجا پیش میاد:
1- چون این برنامه تمام پیام های رد و بدل شده رو اول داخل دیتا بیس ذخیره می کنه و بعد از ارسال از دیتا بیس حذف می کنه این باعث نمیشه که سرعت سایت کلا پایین بیاد (چون احتمال داره سایت بخش های دیگه هم داشته باشه که از دیتا بیس استفاده می کنه)
2- و بعد از اینکه مثلا تعداد 1000 نفر با هم چت کردنی کل دیتا بیس بخوابه (به خاطر حجم بالای اطلاعاتی که رد و بدل میشه و به تعداد زیادی کوری اجرا میشه)
3- چون پیغام ها بعد از ارسال شدن حذف میشه چطوری میشه از مطالب رد و بدل شده آرشیو گرفت که بعدا مدیر سایت بتونه رد صحبت ها رو پیگیری کنه و در صورت تخلف با فرد خاطی برخورد بشه.
4- در صورت نبود یک فرد اطلاعات گرفته بشه و بعد از اینکه فرد آنلاین شد پیام ها به صورت آفلاین بهش نمایش داده بشه (البته اگه مورد قبلی حل بشه این هم حل میشه :چشمک:)

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

از دوستان اگه کسی نظر داره بگه تا من روی این پروژم اعمال کنم.

راستی یادم رفت بگم. من برای اینکه بتونم کدهای PHP رو روی دستگاه خودم اجرا کنم از Wamp server 2 استفاده می کنم. در هنگام نصب و اجرای این برنامه دیگه هیچ کدوم از برنامه های دیگه که روی wamp اجرا می شد دیگه اجرا نمی شدن. مثل اینکه با اجرای این کل موتور های دیتا بیس و PHP می خوابید و برای اینکه وضعیت به حالت عادی برگرده دستگاه باید ریست میشد. از دوستان این برنامه رو روی دستگاه خودشون نصب و اجرا کنند و اگه مشکلی داشتند به من هم بگند.

این برنامه رو همین جا آپلود می کنم تا از نظرات اساتید محترم هم استفاده کنیم. :بوس:

امیـرحسین
پنج شنبه 30 مهر 1388, 21:41 عصر
سلام.
اول اینکه سیستم چت کلا سیستم سنگینیه و یه سرور فشار وارد می کنه این یعنی حدستون توی بند 1 و 2 کاملا درسته.
درباره بند سوم. آرشیو اطلاعات ممکنه ولی چنین کاری جالب به نظر میاد چون حجم بالایی نیازه برای ذخیره اطلاعاتی که عملا بی استفاده اند و از اون مهمتر حریم شخصی کاربران هست که کاملا از بین میره. یعنی هیچکس حق دسترسی به محتوای اطلاعات رد و بدل شده نداره حتی مدیر سایت یا هرکس دیگه ای مگه اینکه بصورت واضح به اطلاع کاربران برسه.
برای مورد چهارم. میشه پیغامهای آفلاین رو برای مدتی یه جا مثلا تو فایلهای JSON یا دیتابیس یا هرجای دیگه ای ذخیره کرد که اگر کاربر وصل شد ببینه. بهتره این اطلاعات بعد از مدتی حذف شه تا اگر کاربر برای همیشه سایت رو ترک کرد، پیغامهای آفلانیش برای همیشه نمونه.....


موفق باشید
AHHP

mahmood3d
پنج شنبه 30 مهر 1388, 23:40 عصر
سلام
از توجهتون خیلی ممنونم که وقت گذاشتین و این برنامه رو تست کردین و به سؤالات من پاسخ دادین.


سلام.
اول اینکه سیستم چت کلا سیستم سنگینیه و یه سرور فشار وارد می کنه این یعنی حدستون توی بند 1 و 2 کاملا درسته.
برای انتقال پیام ها چه راهی رو پیشنهاد می کنید که هم خود سایت سبک باشه و هم به دیتا بیس فشار وارد نشه؟


درباره بند سوم. آرشیو اطلاعات ممکنه ولی چنین کاری جالب به نظر میاد چون حجم بالایی نیازه برای ذخیره اطلاعاتی که عملا بی استفاده اند و از اون مهمتر حریم شخصی کاربران هست که کاملا از بین میره. یعنی هیچکس حق دسترسی به محتوای اطلاعات رد و بدل شده نداره حتی مدیر سایت یا هرکس دیگه ای مگه اینکه بصورت واضح به اطلاع کاربران برسه.
در بسیاری از سایت هایی که امکان گفتگو رو می دن من دیدم که یک گزینه ای وجود داره در صورتی که کسی مزاحم کس دیگه ای بشه و یا قوانین سایت رو رعایت نکنه با استفاده از گزینه ای که توی صفحه تعبیه شده مطالب رد و بدل شده رو به مدیر سایت گزارش بده تا به مسائل رسیدگی کنه. (نمونش تو سایت کلوب)
اگه این مورد رو توی قوانین استفاده از سرویس اضافه کنم فکر نکنم مشکلی از بابت حریم خصوصی افراد وجود داشته باشه. چون فقط در صورت گزارش فقط داده های مربوط به اون بخش بررسی میشه.
برای ذخیره این موارد هم من مس خواستم این اطلاعات رو تو دیتا بیس نگه دارم و در یک مدت معینی اطلاعات قدیمی رو پاک کنم. مثلا تو دیتا بیس یک فیلدی اضافه کنم که حالت خونده شدن پیام رو داشته باشه (با این کار مورد چهارم هم حل میشه) یعنی وقتی پیام اضافی میشه و به دیتا بیس وارد میشه این فیلد مقدار 1 بگیره و وقتی که کاربر پیامش رو خوند دیگه رکورد حذف نشه و فقط مقدار اون فیلد صفر بشه با این کار هم مورد پیام های آفلاین حل میشه و هم می تونیم یک آرشیو داشته باشیم و اطلاعاتی که مربوط به 1 ماه پیش می شه رو با نوشتن چند خط کد حذف کنیم.
البته چون حجم اطلاعات وحشتناک بالا می ره فکر نکنم این فکر خوبی باشه. اگه پیشنهاد بهتری دارید من سراپا گوشم. :چشمک:


برای مورد چهارم. میشه پیغامهای آفلاین رو برای مدتی یه جا مثلا تو فایلهای JSON یا دیتابیس یا هرجای دیگه ای ذخیره کرد که اگر کاربر وصل شد ببینه. بهتره این اطلاعات بعد از مدتی حذف شه تا اگر کاربر برای همیشه سایت رو ترک کرد، پیغامهای آفلانیش برای همیشه نمونه.....


با ذخیره پیام ها تو دیتا بیس مشکلی ندارم ولی همون طور که گفتم نگران حجم بالای داده ها هستم که دیتا بیس رو بخوابونه.
در مورد فایل های JSON هم چیزی نمی دونم اگه میشه در این مورد کمی توضیح بدین :خجالت:
برای کاربرانی هم که کلا سایت رو ترک کرده باشن می تونیم پیام های آفلاینشون رو تا 2 ماه نگه داری کنیم و بعد از اون پاک کنیم. فکر کنم فکر خوبی باشه.

امیـرحسین
جمعه 01 آبان 1388, 12:52 عصر
برای انتقال پیام ها چه راهی رو پیشنهاد می کنید که هم خود سایت سبک باشه و هم به دیتا بیس فشار وارد نشه؟برای انتقال اطلاعات باید از یک فرمتبندی استفاده بشه مثل XML یا JSON که JSON هم سبکتره و هم کار کردن باهاش ساده تره. اینجا یه مطلب معرفی و آموزش برای JSON وجود داره: JavaScript Object Notation (JSON) (http://www.learn-ajax-tutorial.com/Json.cfm)


در بسیاری از سایت هایی که امکان گفتگو رو می دن من دیدم که یک گزینه ای وجود داره در صورتی که کسی مزاحم کس دیگه ای بشه و یا قوانین سایت رو رعایت نکنه با استفاده از گزینه ای که توی صفحه تعبیه شده مطالب رد و بدل شده رو به مدیر سایت گزارش بده تا به مسائل رسیدگی کنه. (نمونش تو سایت کلوب)
اگه این مورد رو توی قوانین استفاده از سرویس اضافه کنم فکر نکنم مشکلی از بابت حریم خصوصی افراد وجود داشته باشه. چون فقط در صورت گزارش فقط داده های مربوط به اون بخش بررسی میشه.
مسلما امکان دادن گزارش باید باشه و فقط اون موقع باید اطلاعات ثبت شه تا مدیر ببینه (نه تا یه مدتی) ولی این کار حتما باید با رضایت کاربر باشه.
برای ذخیره هم از اونجایی که این اطلاعات بحرانی نیستند، میشه توی فایل یا دیتابیسهای جداگانه ذخیره کرد تا مدیر رسدیگی کنه و پاکشون کنه.

باز هم میگم سیستم چت سیستم سنگینیه و با تراکم کاربران، به سرور فشار زیادی میاد. بیشترین فشار برای چک کردن پیامهاست. یعنی شما باید توسط AJAX، هر 1 ثانیه یکبار، دیتابیس رو چک کنید تا از وارد شدن پیغام جدید مطلع شید. مثلا من دارم با شما چت می کنم، من یه پیغام میفرستم. سایت این پیغام رو تو دیتابیس ثبت می کنه حالا باید به طریقی از اضافه شدن این پیغام مطلع بشه. برای این کار سایت باید هر مثلا 1 ثانیه یکبار، دیتابیس رو چک کنه و اگر برای گفتگوی فلان کاربر، پیغام جدید وجود داشت، لود کنه و نمایش بده. این سنگینترین بخش سیستم هست که باید مرتب پردازش سنگین انجام بده....