ورود

View Full Version : برنامه چت chat



kamrannazari
سه شنبه 20 آبان 1393, 18:25 عصر
سلام

یک نرم افزار چت با استفاده از اندروید و بخش وبش با استفاده از C#‎‎ نوشتم ولی مشکلاتی دارم
یکی اینکه من مثلا هر نیم ساعت یک بار آخرین دریافت ها رو چک می کنم
اگ هم تو همون پنجره باشه هر یک یا دو دقیقه و ... آخرین دریافتها رو چک می کنم ولی
این کار فشار زیادی رو دیتا بیس و ترافیک میاره

آیا دیگر نرم افزارها هم از همین روش برای آخرین دریافت ها استفاده می کنند. فکر نمی کنم چون مثلا در واتس آپ یا وایبر و ... به محض ارسال طرف مقابل پیام رو دریافت می کنه

اگر کسی اطلاعات هر چند مختصر داره لطفا یک اشاره ای کنه.

در بعضی جاها نوشته که از برنامه نویسی سوکت استفاده کنیم این هم روش خوبیه چون همیشه و با کمترین ترافیک به سرور متصل است و درحال گوش دادنه و به محض درخواست متوجه می شه ولی نمی دونم برای
اینکه اندروید بتونه به وب سایت اون هم C#‎‎ با سوکت با هم برقرار کنند؟؟؟؟

تشکر

tux-world
سه شنبه 20 آبان 1393, 19:16 عصر
من یه همچین چیزی رو با سمت سرور با php نوشتم و با اندرویدم هر ۵ ثانیه !! دارم چک میکنم ولی هیچ مشکلی که گفتید رو ندارم. نمیدونم کجا اشتباه کردید و چیکار کردید. اگه این رو ببرم رو ۳۰ ثانیه فقط پونصد کیلوبایت دریافتی دارم مواقعی که داده ندارم اگرم داشته باشم به زور باز به پونصد کیلو میره

MSHService
چهارشنبه 21 آبان 1393, 09:40 صبح
درود

اره راحت میتونی بنویسی ، چون TCP توی لایه انتقال از مدل TCP/IP هست ، پس تموم زبانهای برنامه نویسی که TCP/IP رو ساپورت میکنن میتونن با سوکت کار کنن.

مهم برنامه سمت سرورت هست که باید عالی باشه و همه چیز رو هندل کنی.

بعد یه برنامه هم سمت اندرویدت باید با سوکت بنویسی که بتونی با سرورت تبادل داشته باشی.

مثال هم توی نت هم زیاد هست.

موفق باشید

Nevercom
چهارشنبه 21 آبان 1393, 11:34 صبح
در سرعت تبادل اطلاعات در این سیستم چند بخش درگیر هست.

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

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

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

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

روش بهتر استفاده از پروتوکل های ارتباطی ای هست که برای این منظور بهینه شدن، XMPP یک مثالش هست.

ساده ترین راه برای ساخت یک چت سرور بر اساس پروتوکل ارتباطی XMPP استفاده از سرور های رایگان (یا پولی) موجود هست.
OpenFire یکی از این سرور ها هست که بر اساس Jabber (پروتوکل XMPP) کار می کنه و با جاوا نوشته شده. این سرور قسمت مدیریتی برای مدیریت کاربرها و گروه ها و روم ها داره و درکل یک چت سرور مناسب هست.
سمت اندروید هم کتابخانه هایی مثل aSmack موجود هست.

البته ظاهراً MQTT یک فریم وورک سبک برای این منظور هست که برای موبایل بهینه تر هست، تحقیق در این مورد به عهده ی خودتون.

گزینه ی دیگه استفاده از فریم وورک هایی هست که مخصوص اندروید تهیه شدن، مثل QuickBlox (http://quickblox.com/developers/Android_XMPP_Chat_Sample) هست که پولی هست و در پلن رایگانش، 20 پیغام در ثانیه و ۲۰٫۰۰۰ کاربر فعال ماهانه رو در اختیارتون میزاره.

maryam241
چهارشنبه 21 آبان 1393, 13:12 عصر
با سلام.یه مثال ندارید با پی اچ پی؟؟؟؟؟؟؟؟؟؟ممنون میشم

ahmad.mo74
چهارشنبه 21 آبان 1393, 13:45 عصر
سلام، به نظرم اینکار اشتباه ترین کار ممکنه که شما بخوای با تایمر مثلا هر چند ثانیه یکبار اطلاعاتت رو به روز کنی، به دلیل اینکه هم دقیق نیست و هم اینکه هر 5 ثانیه داری یه کار اضافی انجام میدی

به جاش باید از همون listener استفاده کنی، من نمیدونم ساختار برنامت چجوریه ولی مثلا باید یه سرویس notification برای برنامت تعریف کنی که همه فعالیت ها به اون گزارش داده بشه و اون هم به کاربر یا کاربرهای مورد نظر اطلاع بده، مثال اگر بخوایم بزنیم مثلا اگر میخوای کاربرات از online بودن یا نبودن هم دیگه اطلاع داشته باشن به جای اینکه مثلا هر 5 ثانیه چک کنی که فلان کاربر آنلاین هست یا نه، کافیه زمانی که کاربری online میشه به سرویس notification گزارش داده بشه و اون هم به بقیه کاربر ها اطلاع بده که فلان کاربر آنلاین شد، این کار باعث میشه که هم دقت بره بالاتر و هم اینکه فشار روی سرور کمتر بشه...

در مورد وایبر و واتس آپ هم 100% مطمئن باش که همین کار رو میکنن.