ورود

View Full Version : سوال: برنامه چت



persian_redhat
پنج شنبه 30 دی 1389, 15:41 عصر
من در حال نوشتن یک برنامه چت هستم.اما با یک مشکل روبرو هستم.بعد از لاگین شدن کاربران و نمایش لیست کابران آنلاین,یک متد برای گوش دادن نوشتم که وظیفه اش گوش دادن به یک پورت برای دریافت متن ارسال شده از کاربران دیگر است.اما در این متد وقتی اجرا به دستور( ) socket.accept میرسه تا وقتی درخواست اتصالی رو دریافت نکنه ادامه برنامه اجرا نمیشه و بنابراین همه کاربران در وضعیت گوش دادن میمونند و نمیتونند چیزی رو به کسی ارسال کنند.چه راه حلی پیشنهاد میکنید؟

AmirHarirbafan
پنج شنبه 30 دی 1389, 16:59 عصر
کلا اکثر توابع مربوط به سوکت ها، همگام هستن و قفل میشن تا در طرف مقابل نیز اکشن متقابل انجام بشه.
البته نسخه ی غیر همگام اون تابع ها هم هستن و که برنامه قفل نمیشه. (Asynchronous I/O)
یا اینکه تابع هایی رو که برنامه رو قفل میکنن در یک Thread دیگر استفاده کنید (Threading)
یا اینکه از روشی به نام I/O بدون وقفه استفاده کنید که فقط در صورتی که شرایط مناسب برای عدم قفل کردن تابع، فراهم شده بود، آن تابع رو میتونید اجرا کنید (Nonclocking I/O)
اما من به شما استفاده از Threading رو پیشنهاد میکنم و خودم هم اکثر مواقع از اون استفاده میکنم چون ساده تره و دردسرش هم کمتره