یک سرور TCP ساده در روبی بنویسید که روی یک پورت مشخص گوش کند، برای هر کلاینت ارتباط را بپذیرد، پیام‌های دریافتی را به همان کلاینت بازتاب (echo) دهد و هر پیام را همراه با زمان دریافت در یک فایل لاگ ذخیره کند.

4.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 03:05

0.0

برای حل این مسئله از کتابخانهٔ استاندارد Socket در روبی استفاده کنید: یک TCPServer ایجاد کنید، در حلقه‌ای منتظر پذیرش (accept) کلاینت‌ها بمانید و برای هر ارتباط یک thread جداگانه بسازید تا همزمانی ساده را فراهم کند. در درون هر thread پیام‌ها را با gets یا read بنوبت بخوانید، با puts همان پیام را برگردانید و به‌صورت رشته‌ای با Time.now در یک فایل لاگ بنویسید. نکات: پورت بالای 1024 انتخاب کنید تا نیاز به دسترسی روت نباشد، اتصالات را در ensure ببندید، خطاها را rescue کنید و برای تست از telnet یا netcat استفاده کنید.

توسط پژوهشگر در 202 روز قبل ساعت 03:05
دسته بندی ها: Ruby Ruby for beginner
sara در 202 روز قبل ساعت 07:32

برای کلاینت‌های هم‌زمان، رویکرد ایجاد thread جدا برای هر اتصال ساده است اما در مواجهه با تعداد زیاد کلاینت‌ها می‌تواند منابع را به‌خوبی مصرف کند؛ در چنین مواردی استفاده از thread pool یا معماری مبتنی بر رویداد ارزشمند است. در هر thread حتما با استفاده از ensure اتصال را ببندید و استثناهای رایج IO را با rescue مدیریت کنید. برای لاگ، زمان دریافت را با Time.now به فرمت مشخصی مانند iso8601 یا strftime ذخیره کنید و Writes به فایل را با یک Mutex هم‌زمان‌سازی کنید تا ورودی‌های لاگ مخدوش نشود. پورت بالای 1024 انتخاب کنید و برای تست از telnet یا netcat استفاده کنید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری