التغطية المصورة ليوم سوالف: الجزء الأول، الجزء الأخير
الفائزون في المسابقة الأصغر لسوالف كاست

 

العودة   سوالف سوفت > قسم تطوير وبرمجة المواقع للمتقدمين > PHP
المدوّنات البحث مشاركات اليوم اجعل كافة المشاركات مقروءة

موضوع مغلق  
 
LinkBack أدوات الموضوع
عضو جديد
تاريخ التسجيل: Nov 2003-
#1 (permalink)  
استخدام الSocket في PHP


السلام عليكم

لدي سؤال بسيط عن socket listen و سؤالي هو عندما انشئ Socket و استخدم Listen في صفحتي PHP
واردت مثلا ان اقوم بالاتصال مع صفحتي يعني Connect هل يجب ان تكون الصفحة محملة في ذاكرة السيرفر
ينتظر اتصال من احد العملاء .

يعني لتبسيط السؤال على سبيل المثال صنعت برنامجين مكتوبين بلغة السي هما زبون و مخدم
للاتصال الزبون مع المخدم يجب ان يكون السيرفر في حالة Listen ومحمل البرنامج في الذاكرة و يحجز بورت معين
للانتظار لتلقي الاتصال من احد العملاء و يجب ان نعطي للبرنامج العميل الايبي و البورت للتصال و هكذا يتم الاتصال


فهل يجوز ذلك في الPHP يعني برنامج السيرفر مكتوب بPHP و العميل باي لغة اخرى هل استطيع تامين الاتصال بين الرنامجين


ملاحظة لقد بحثت في موقع php.net ولكن لم اجد جواب لسؤالي هل يبقى برنامج السيرفر المكتوب ب PHP ان يكون جاهزا و مستعدا لتلقي الاتصال
دون تشغيل الصفحة طبعا بدون تدخل السيرفر .

يمكن يكون سؤالي فيه بعض الاخطاء و لكن ارجو ان اجد الجواب الكافي منكم .


ولكم جزيل الشكر






__________________
إستخدم ملفك الخاص لكتابة توقيعك
Net-Man غير متواجد حالياً   قديم 14-09-2004, 06:36 AM
عضو نشيط
تاريخ التسجيل: Jun 2004-
#2 (permalink)  
بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته ... تحية طيبة استاذي الغالي وبعد


بالنسبة إلى 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 هو بإختصار (الذاكرة) ووجود البرنامج السيرفر فيها.

وهذا مالدي الآن فإن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله عز وجل
أخوك عبدالله عيد






__________________
قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)
عبدالله عيد غير متواجد حالياً   قديم 14-09-2004, 02:25 PM
عضو جديد
تاريخ التسجيل: Nov 2003-
#3 (permalink)  

السلام عليكم

الف شكر استاذي بس انت الي قولته انا فكرت فيه بس لنفترض ان المستخدم ليس لديه سيرفر بس مساحة معينة لذلك لا استطيع ان اتعامل مع السيرفر مثل ما بدي يعني هذه ما من صلاحيات المستخدم
انا ادور على طريقة انتعمل مع السيرفر مباشرة (طبعا من دون استخدام الفايلات)


على اي حال مشكور كتير استاذ عبد الله تعبتك معاي لك جزيل الشكر






__________________
إستخدم ملفك الخاص لكتابة توقيعك
Net-Man غير متواجد حالياً   قديم 15-09-2004, 12:08 AM
مشرف قسم PHP
تاريخ التسجيل: Apr 2002-
#4 (permalink)  

ممكن ... سوي set_time_limit(0) وسوي listen على كيفك مع ملاحظه انك يجب ان تشغله عن طريق SSH .
وسوف يعمل على شكل سرفر ..... وتستطيع ان تتصل به هذه هو الحل الذي لدي






__________________
I Love PHP (d4d@hotmail.com)
http://www.daif.net/
daif غير متواجد حالياً   قديم 18-09-2004, 07:59 AM
موضوع مغلق


 

أدوات الموضوع

تعليمات المشاركة
لا تستطيع كتابة مواضيع
لا تستطيع كتابة ردود
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة



الساعة الآن: 03:02 PM بتوقيت المملكة العربية السعودية