PDA

View Full Version : سوال: socket



cccccccccc
سه شنبه 17 شهریور 1394, 11:11 صبح
سلام
در یک برنامه چت (با تعداد زیادی کاربر) چطور داده های ارسالی از طرف کاربران را دریافت کنیم که سیستم کارامد باشد؟

برای هر کلاینت یک ترد؟!!
کلاینت ها اطلاعات را post و سرور از طریق socket پاسخ دهد؟
یا در یک ترد کلیه داده ها را دریافت کنیم؟!

باتشکر.

arenaw
سه شنبه 17 شهریور 1394, 13:57 عصر
به نظر من بهتره که NodeJs استفاده کنید.

cccccccccc
سه شنبه 17 شهریور 1394, 14:06 عصر
به نظر من بهتره که NodeJs استفاده کنید.

ممنون از پاسختون
چرا؟ لطفا درمورد nodejs و مزیتاش توضیح بدید

pbm_soy
سه شنبه 17 شهریور 1394, 15:11 عصر
هر کدام را دوست دارید انتخاب کنید ولی درجواب سوال شما باید بگنم socket programming یک روش و ابزاری است که با شبکه در سطوح پایین میتواند کار کند و با انواع سرویسهای موجود مانند وب سرور ftp server , dns server , و غیره هم میتوان کار کرد و یا برنامه نوشت
ولی در هرصورت دردسرها و محدودیتها و مزایای خودش را دارد.
بله برای چت هم شما برای هر کاربر حداقل باید یک ترد ایجاد کنید چون وقتی کلاینت درخواست اتصال به سرور میدهد سرور به درخواست کانکشن جواب میدهد و یک ترد برایش باز میکند باید تردها را خوب مدیریت کنید حتی میتوانید تعداد تردهای ایجاد شده را میتوانید محدود کنید تا کسی نتواند حملات dos کند البته سروط دیگر هم میتوان به آن اضافه کرد
در این روش هردوطرف از سوکتها استفاده میکنند وشاید کمی مشکل باشد در مقابل node.js

cccccccccc
سه شنبه 17 شهریور 1394, 15:26 عصر
هر کدام را دوست دارید انتخاب کنید ولی درجواب سوال شما باید بگنم socket programming یک روش و ابزاری است که با شبکه در سطوح پایین میتواند کار کند و با انواع سرویسهای موجود مانند وب سرور ftp server , dns server , و غیره هم میتوان کار کرد و یا برنامه نوشت
ولی در هرصورت دردسرها و محدودیتها و مزایای خودش را دارد.
بله برای چت هم شما برای هر کاربر حداقل باید یک ترد ایجاد کنید چون وقتی کلاینت درخواست اتصال به سرور میدهد سرور به درخواست کانکشن جواب میدهد و یک ترد برایش باز میکند باید تردها را خوب مدیریت کنید حتی میتوانید تعداد تردهای ایجاد شده را میتوانید محدود کنید تا کسی نتواند حملات dos کند البته سروط دیگر هم میتوان به آن اضافه کرد
در این روش هردوطرف از سوکتها استفاده میکنند وشاید کمی مشکل باشد در مقابل node.js

ممنون
اگر برای هر کلاینت یک ترد بسازم در صورتی که تعداد کاربران به بالای فرضا 10000 رسید چی؟! مشکل ساز میشه
آیا امکانپذیر هست که فقط در یک ترد پیام های همه ی کاربران را دریافت کنم؟(اینکه چه پیامی مربوط به چه کاربری است در متن پیام مشخص شود)

pbm_soy
سه شنبه 24 شهریور 1394, 02:32 صبح
چنین کاری را بدون ترد انجام ندادم!
ولی تو ستای راهنمای php مثال سوکت نویسی را ببینید دومین مثالی که نوشتن بدون تردها و با استفاده از آرایه ها تمام ارتباطها را مدیریت کرده و تبادل اطلااعات کرده البته من آن کد را تست نکردم میتوانید اجرا کنید و بررسی کنید
ولی در هرصورت اگر درخواست یکی از کاربرها خیلی طول بکشه که از طرف سرور جواب داده بشه ا
اون موقع دیگر کاربران معطل میمانند! چون کل کارها داخل یک حلقه انجام میشه !
الگوریتم کار دقیق خاطرم نیست شما سوکت پورگرامینگ در php را سرچ کنید و لینک سایت php.net بود اشتباه نکنم آنرا بررسی کنید

cccccccccc
پنج شنبه 26 شهریور 1394, 12:02 عصر
وقتی تاپیک رو زدم در مورد nodejs اطلاعی نداشتم
اما الان سعی میکنم با nodejs کار کنم
ممنون از کمک همه