PDA

View Full Version : سوال: خواندن همزمان از 4 سوکت



fh_joker
دوشنبه 12 بهمن 1394, 12:01 عصر
سلام
من 4 تا سرور دارم که از طریق شبکه به یک کلاینت وصل هستن.
حالا باید در کلاینت ، با سوکت نویسی کاری کنم داده هایی که از هر 4 سوکت میاد به صورت همزمان ثبت بشن توی دیتابیس.
الان با یک سرور درست کار میکنه.
این کار چه طوری انجام میشه؟
سوال دیگه اینکه multithreads توی apache جواب میده ؟ از چه ورژن به بعد توی php ساپورت شده؟
اگر بخوام از چند نخی استفاده کنم باید چه کار کنم؟
خیلی ضروریه.

Unique
دوشنبه 12 بهمن 1394, 15:19 عصر
من 4 تا سرور دارم که از طریق شبکه به یک کلاینت وصل هستن.
حالا باید در کلاینت ، با سوکت نویسی کاری کنم داده هایی که از هر 4 سوکت میاد به صورت همزمان ثبت بشن توی دیتابیس.

من با مفهوم سوالت مشکل دارم از اول ! میگی چهار تا سرور داری که به یک کلاینت وصل هستن ؟! معمولا اونی که Listen میکنه و اتصال ها را Accept میکنه بهش میگن سرور یعنی شما چهار تا کلاینت داری که به یک سرور وصل هستند !؟

توی این سناریو خوب وقتی Accept میکنی میتونی کلاینت را شناسایی کنی دیگه ، پس اطلاعات وقتی میاد مشکلی نیست و معلومه از طرف کی میاد و مهم هم نیست همزمان میرسه یا غیره. اطلاعات را میخونی و پردازش میکنی دیگه ! حالا مشکل چیه ؟

یا اینکه یک کلاینت داری که به چهار تا سرور روی IP های مختلف یا Port های مختلف وصل میشه ؟!
نوی این حالت هم داری چهار تا Socket میزنی و اطلاعات را روی چهار تو Socket میخونی. حالا مشکل چیه ؟!

اول از همه توضیح بده دقیقا میخوای چیکار کنی ،‌چون تا تاپیک معلوم نشه کار خاصی نمیشه کرد.
بعد هم معلوم کن سناریو کدومه ! و بعدش توضیح بده مشکلت چیه !؟


سوال دیگه اینکه multithreads توی apache جواب میده ؟ از چه ورژن به بعد توی php ساپورت شده؟
اگر بخوام از چند نخی استفاده کنم باید چه کار کنم؟

منظورت از چند نخی توی Apache چیه ؟ داری براش Module مینویسی ؟ یا کلا منظورت PHP هست ؟

fh_joker
چهارشنبه 14 بهمن 1394, 10:48 صبح
ممنون از پاسخ
من 4 تا سرور دارم با ip و port متفاوت. و یک کلاینت که داده ها رو دریافت میکنه.
ip و پورت ها از دیتابیس میاد یعنی ممکنه تعداد سرورها 1 باشه یا 5 تا به خاطر همین نمی تونم خودم توی کد 4 تا سوکت بزنم.
از دیتابیس آی پی و پورت رو سلکت کردم گذاشتم توی while روی هر سوکت 120 ثانیه می مونه بعد میره سوکت بعد.
دیتایی که از طریق سوکت دریافت میشه میریزم توی دیتابیس. حالا اون لحظه ای که سوکت قطع میشه داده ها ناقص میاد.
اون لحظه ای هم که دوباره وصل میشه داده ناقص دارم.
الان وقتی به یکی از سرور ها وصل میشم اطلاعات سرور دیگه قطع میشه ولی باید همزمان باشه.
به دو دلیل باید همزمان بشن :
1- داده هایی که زمان قطع و وصل شدن از بین میرن
2 - تاخیری که در نمایش داده ها دارم


منظورت از چند نخی توی Apache چیه ؟ داری براش Module مینویسی ؟ یا کلا منظورت PHP هست ؟
منظورم خود php بود .
البته فهمیدم ساپورت میشه و باید pthraed رو نصب کنم که توش موندم.
برنامه من روی Cent Os هست باید maintainer-zts رو فعال کنم که هنوز نتونستم.

joker
چهارشنبه 14 بهمن 1394, 11:01 صبح
منم هنوز نفهمیدم دقیقا قراره چیکار کنی
php را بهتره که پورت باهاش listen نکنی

اگه مجبوری که 1الی5تا سوکت متفاوت بزنی بهتره این کار را توسط یک فایل رابط انجام بدی که ip-port را به فایلی که قراره سوکت بزنه انتقال بده و عملا هر بار صدا زده شدن فایل فقط یک سوکت بزنه که سوکت دومت منتظر تمام شدن و کلوز شدن اولی نباشه.

Unique
چهارشنبه 14 بهمن 1394, 15:59 عصر
باز هم گنگ میگی !

اینطور که من فهمیدم سرور ها دست شما نیستن و شما یکسری ip و port ازشون توی پایگاه داده داری که هر بار با فایل PHP همه را میخونی و بهشون وصل میشی و اطلاعات را دریافت میکنی.

سرور ها داده ها را broadcast میکنن ؟! منظورم اینه مثل صدا و تصویر همش داره Stream میشه !؟ یا شما دستور میزنی و بر اساس درخواست و دستور شما داده ها دریافت میشن ؟!

اگه حالت اول باشه خوب باید چند تا Socket همزمان داشته باشی اما کلا php برای چنین کار هایی که شروع و پایانش انقدر طولانی میشه به نظر من مناسب نیست.
اگه حالت دوم باشه نیاز به این کار نیست ،‌شما وصل میشی و درخواست را میدی و اطلاعات را دریافت میکنی و Socket بعدی !

روش joker هم بد نیست اما توضیح نداده ، توی php یک تابع هست به نام popen که میتونی یک connect.php بنویسی که شماره port و ip را بگیره و شروع به پردازش کنه. اینطوری میتونی همزمان n بار popen را با پارامتر های مختلف به فایل connect.php صدا بزنی و در آخر با تابع stream_get_contents خروجی هر کدوم را جدا بخونی. اگه هم نیاز به خروجی نداری که هیچی !

اینجا (http://www.mullie.eu/parallel-processing-multi-tasking-php/) در مورد روش های Multitasking توضیح داده که همین بحث popen را هم در آخر گفته.