سؤال

أنا أكتب خادم ويب بلغة Java وأريده أن يدعم اتصالات HTTP 1.1 Keep-Alive.ولكن كيف يمكنني معرفة متى ينتهي العميل من إرسال طلبات اتصال معين؟(مثل نهاية السطر المزدوجة أو شيء من هذا القبيل).

دعونا نرى كيف يتعامل Stackoverflow مع هذا السؤال الغامض للغاية - الإجابات عليه، على Google، غارقة في المواصفات الفنية واللغة الغامضة.أريد إجابة باللغة الإنجليزية البسيطة لمبرمج غير C :)


أرى.وهذا يؤكد شكوكي في الاضطرار إلى الاعتماد على المقدرة على SwitchTimeoutException.لكنني لم أكن متأكدًا مما إذا كان هناك شيء يمكنني الاعتماد عليه من العميل يشير إلى انتهاء الاتصال - وهو ما سيسمح لي بإغلاق الاتصالات عاجلاً في معظم الحالات - بدلاً من انتظار انتهاء المهلة.شكرًا

هل كانت مفيدة؟

المحلول

إذا كنت تقوم ببناء خادمك للوفاء بالمعايير، فلديك الكثير من المعلومات لإرشادك هنا بالفعل.

كلام بسيط، يجب أن يستند إلى الوقت الذي تم فيه استخدام الاتصال، وليس على مستوى بيانات الطلب.

بطريقة أطول مهب الريح، و قسم الاعتبارات العملية يحتوي مستند HTTP/1.1 على بعض الإرشادات لك:

"عادةً ما يكون للخوادم بعض قيمة المهلة التي لن تحتفظ بها بعد الآن.قد تجعل خوادم الوكيل هذه قيمة أعلى لأنه من المحتمل أن يقوم العميل بإجراء المزيد من الاتصالات من خلال نفس الخادم.لا يضع استخدام الاتصالات المستمرة أي متطلبات على طول (أو الوجود) من هذا الوقت للعميل أو الخادم. "

أو

"عندما يرغب العميل أو الخادم في العمل ، يجب أن يصدر إغلاقًا رشيقًا على اتصال النقل.يجب أن يراقب العملاء والخوادم باستمرار الجانب الآخر من النقل ، والرد عليه حسب الاقتضاء.إذا لم يكتشف العميل أو الخادم إغلاق الجانب الآخر على الفور ، فقد يتسبب ذلك في استنزاف موارد غير ضروري على الشبكة. "

نصائح أخرى

دعونا نرى كيف يتعامل Stackoverflow مع هذا السؤال الغامض للغاية - الإجابات عليه، على Google، غارقة في المواصفات الفنية واللغة الغامضة.

أنا فقط وضعت متى يجب علي إغلاق اتصال HTTP 1.1؟ في Google، وكانت النتيجة الثالثة هي جعل HTTP سهلًا حقًا.يوجد في جدول المحتويات رابط لقسم بعنوان الاتصالات المستمرة و"الاتصال:إغلاق" رأس.يتكون هذا القسم من ثلاث فقرات، ويستخدم لغة بسيطة للغاية، ويخبرك بالضبط بما تريد معرفته.

أريد إجابة باللغة الإنجليزية البسيطة لمبرمج غير C :)

مع كامل احترامي، البرمجة هي مسعى تقني حيث التفاصيل لها أهمية كبيرة.تعد قراءة الوثائق الفنية مهارة أساسية للغاية.إن الاعتماد على تفسيرات الطرف الثالث "باللغة الإنجليزية البسيطة" للمواصفات لن يؤدي إلا إلى أداء عمل سيئ.

يمكنك إغلاقه وقتما تشاء.يشير الرأس إلى أن العميل يفضل ترك الاتصال مفتوحًا، لكن هذا لا يتطلب امتثال الخادم.تتركه معظم الخوادم مفتوحًا لمدة تتراوح من 5 إلى 10 ثوانٍ تقريبًا، والبعض الآخر لا ينتبه إليه على الإطلاق.

يجب عليك قراءة RFCs التي تتناول ميزة Keep-Alive.وإلا فقد ينتهي بك الأمر بخادم لا يعمل كما هو متوقع.

كما أشار @[Stephen] بالفعل، فإن الخادم حر في إغلاق الاتصال في أي وقت يرغب فيه (حسنًا، ليس في منتصف زوج الطلب/الاستجابة بالرغم من ذلك).كما سبق للعميل.أي حل آخر من شأنه أن يسمح للخادم أو العميل بتنفيذ DoS على الطرف الآخر.

يحرر:ألق نظرة على رأس الاتصال.يمكن للعميل (والخادم) طلب إغلاق اتصال آمن باستخدام الرأس.على سبيل المثال، Connection: close يوجد داخل الطلب طلب من الخادم لإغلاق الاتصال بعد أن يرسل الاستجابة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top