| |||||||
| المدوّنات | البحث | مشاركات اليوم | اجعل كافة المشاركات مقروءة |
|
| | LinkBack | أدوات الموضوع |
| |||||
| استخدام الSocket في PHP لدي سؤال بسيط عن socket listen و سؤالي هو عندما انشئ Socket و استخدم Listen في صفحتي PHP واردت مثلا ان اقوم بالاتصال مع صفحتي يعني Connect هل يجب ان تكون الصفحة محملة في ذاكرة السيرفر ينتظر اتصال من احد العملاء . يعني لتبسيط السؤال على سبيل المثال صنعت برنامجين مكتوبين بلغة السي هما زبون و مخدم للاتصال الزبون مع المخدم يجب ان يكون السيرفر في حالة Listen ومحمل البرنامج في الذاكرة و يحجز بورت معين للانتظار لتلقي الاتصال من احد العملاء و يجب ان نعطي للبرنامج العميل الايبي و البورت للتصال و هكذا يتم الاتصال فهل يجوز ذلك في الPHP يعني برنامج السيرفر مكتوب بPHP و العميل باي لغة اخرى هل استطيع تامين الاتصال بين الرنامجين ملاحظة لقد بحثت في موقع php.net ولكن لم اجد جواب لسؤالي هل يبقى برنامج السيرفر المكتوب ب PHP ان يكون جاهزا و مستعدا لتلقي الاتصال دون تشغيل الصفحة طبعا بدون تدخل السيرفر . يمكن يكون سؤالي فيه بعض الاخطاء و لكن ارجو ان اجد الجواب الكافي منكم . ولكم جزيل الشكر
__________________ إستخدم ملفك الخاص لكتابة توقيعك | |||||
|
| |||||
| بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته ... تحية طيبة استاذي الغالي وبعد بالنسبة إلى socket فكما ذكرت يجب ان يكون برنامج الذاكرة في حالة listen وهذا يشير منطقياً إلى ان البرنامج موجود في الذاكرة..... وانت تريد اعطاء العميل ip و port للوصول إلى السيرفر وهذا الكلام برضه سليم .... ولكن لحظة دقق معين .... php ليست الا ملفات عادية يتم استدعائها بعملية تحفيز وهي بكتابة مسارها ضمن URL لذلك هي ليست برنامج معزول وإنما ملف يحتاج بعض الأشياء لإكماله وترجمته وإخراجه حسب الصورة المطلوبة وهذه الترجمة يتكفل بها php compiler لذلك سيكون الملف موجود في الذاكرة لحظة طلبه من خلال العنوان وتمريره إلى php compiler لذلك سيظل الملف في الذاكرة إلى ان ينتهي php compiler من ترجمته ثم يحذف الملف من الذاكرة وهذه العملية تتم بسرعة عالية تقاس بأجزاء من الثانية يعني هنا مشكلة فالبرنامج السيرفر يجب ان يظل متواجد ضمن ذاكرة السيرفر طالما أن جهاز السيرفر يعمل لكي يتلقى هذا السيرفر طلبات من العديد من Client لذلك سكربت php لايمكن التعامل معه كسيرفر في اعتقادي الشخصي وحسب ماهو واضح .... فهنا مشكلة في بقاء الملف ضمن ذاكرة جهاز السيرفر... phpGTK ولكن هل php GTK هي حل ؟ فكما يقولون ان phpGTK تعمل لصنع Desktop Application وليس لها علاقة بالمواقع وغيره فأنا اقول مثلاً قم بعمل Desktop Application على جهاز السيرفر يعمل كـ Server Program وسيكون هو في جهاز السيرفر مجرد Client Program لأنه معمول على phpGTK اما برامج Client الموزعة للعملاء فستكون مختلفة عن مزايا البرنامج المكتوب phpGTK . وأظن ايضاً ان php GTK تعطي حلاً حسب اعتقادي الشخصي والسبب هو ان php GTK تعطي execution File in run time mode اي تعطي ملفات تنفيذية ولكن تعطيها وقت التشغيل يعني سيكون php compiler معها لذلك إذا جعلت ملفات php Gtk تعمل من ضمن السيرفر اي تعمل ضمن جهاز السيرفر كـ Client Program وتعمل كـ Server Program بالنسبة لبرامج ال Client الموجودة ضمن اجهزة العملاء ويتم تشغيلها مع Process الخاصة بالسيرفر فإنه سيتم عمل ملف تنفيذي و إبقاءه في الذاكرة وطالما ان جهاز السيرفر يعمل فسيظل البرنامج الخاص بالسيرفر يعمل اذا لم يقم احد بإيقافه وسيكون في الذاكرة وعندها تستطيع استخدام اي سكربت php عادي على ما أظن ليعمل كـ Client Scrpt أو تصنع Client Program بواسطة phpGtk وهذه مجرد طريقة مفبركة لإبقاء البرنامج ضمن الذاكرة وهذا ما يتطلبه socket يعني بإختصار إذا نجحت في إبقاء البرنامج في الذاكرة فإنه بنسبة طيبة وجيدة سيعمل. أو أعانك الله وقم بعملها كـ CGI مكتبوبة على لغة C وهذه اقوى جداً ولكن المشكلة انها ستأخذ وقت و لغة C تعطي دعما لمكتبات socket بشكل ممتاز سواء على ويندوز بإستخدام مكتبات winsock او على linux او بقية الأنظمة واجعله يعمل كسيرفر ثم قم بعمل برامج تنفيذية ذات واجهات واستخدم مثلاً Visual C لعمل برنامج Client والسبب انه يعطي دعم ممتاز لذلك ويمكنك ايضاً كتابة server و client في بيئة Visual C فهو يعطيك مكتبات socket على شكل OOP ضمن مكتبة MFC الخاصة بشركة ميكروسوفت ويمكنك من عمل برنامج واحد يعمل كـ Client و Server في وقت واحد وذلك بتحديد نوع العملية هل listen او recive او send وما إلى ذلك..ز وأخيراً .... أرجوا لك التوفيق مع عملك ولاتنسى ان ملفات php هي ملفات عادية يتم وضعها ضمن الذاكرة اثناء استدعائها من قبل المترجم و في الاخير سيتم عمل تنظيف وإخلاء الذاكرة من وجود الملف يعني لن تستفيد شئ على ما أظن فكل عمل socket هو بإختصار (الذاكرة) ووجود البرنامج السيرفر فيها. وهذا مالدي الآن فإن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله عز وجل أخوك عبدالله عيد
__________________ قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل) | |||||
|
| |||||
|
السلام عليكم الف شكر استاذي بس انت الي قولته انا فكرت فيه بس لنفترض ان المستخدم ليس لديه سيرفر بس مساحة معينة لذلك لا استطيع ان اتعامل مع السيرفر مثل ما بدي يعني هذه ما من صلاحيات المستخدم انا ادور على طريقة انتعمل مع السيرفر مباشرة (طبعا من دون استخدام الفايلات) على اي حال مشكور كتير استاذ عبد الله تعبتك معاي لك جزيل الشكر
__________________ إستخدم ملفك الخاص لكتابة توقيعك | |||||
|
| |||||
|
ممكن ... سوي set_time_limit(0) وسوي listen على كيفك مع ملاحظه انك يجب ان تشغله عن طريق SSH . وسوف يعمل على شكل سرفر ..... وتستطيع ان تتصل به هذه هو الحل الذي لدي
__________________ I Love PHP (d4d@hotmail.com) http://www.daif.net/ | |||||
|
![]() |
| |
| |
| أدوات الموضوع | |
| |