سؤال

خادم HTTP المضمن في JDK 6 هو مساعدة كبيرة في تطوير خدمات الويب، لكنني حصلت على موقف حيث نشرت نقطة نهاية، ثم تعطل الرمز وترك الخادم قيد التشغيل.

كيف يمكنك إيقاف تشغيل الخادم المضمن بمجرد فقد الإشارة إليه (أو نقطة النهاية المنشورة)؟

لا يوجد حل صحيح

نصائح أخرى

يمكنني استخدام الرمز أدناه لبدء تشغيله

    this.httpServer = HttpServer.create(addr, 0);
    HttpContext context = this.httpServer.createContext("/", new DocumentProcessHandler());
    this.httpThreadPool = Executors.newFixedThreadPool(this.noOfThreads);
    this.httpServer.setExecutor(this.httpThreadPool);
    this.httpServer.start();

وتحت الكود لإيقاف ذلك

        this.httpServer.stop(1);
        this.httpThreadPool.shutdownNow();

لم أستخدم هذا الخادم أبدا ولا يمكنني العثور على أي وثائق جيدة. ربما حدثت هذه الحلول الأقل أناقة لك بالفعل، لكنني اعتقدت أنني سأذكرها.

يبدو أن com.sun.net.httpserver.httpserver لديه فئة تنفيذ تسمى httpserverimpl. لديها طريقة تسمى وقف ().

أو ربما يمكنك العثور على موضوع الاستماع على مقبس الخادم وقطع الاتصال ().

شون

ماذا عن عدم فقدان المرجع، إذن؟ عندما تقول تعطل الكود الخاص بك، أفترض أنك تحصل على استثناء في مكان ما. اين بالضبط؟ لذا فإن شخصا قادرا على اعتراض هذا الاستثناء يحتاج إلى مرجع أيضا إلى HTTPServer، والذي قد تضطر إلى تمريره حول نفسك.

يحرر: أوه. في هذه الحالة، إذا كنت لا ترغب في قتل JVM بأكمله باستخدام HTTPServer فيها، فستحتاج إلى تقديم شكل من أشكال IPC إلى البيئة، مثل قناة قيادة عبر RMI التي يمكن استدعاءها من برنامج Java (و وبالتالي النملة).

سيكون حلا آخر هو الاستماع إلى الخادم للحصول على استعلام ملف تعريف الارتباط "السري"، حيث يمكنك طباعة / حفظ ملف تعريف الارتباط عند بدء التشغيل بحيث يمكن أن يسترجع البرنامج النصي للنمل ملف تعريف الارتباط، ويمكنك إطلاق استعلام عن عنوان URL الخاص بك "سر" على أي خادم سيخرج بأمان.

سأذهب مع حل RMI السريع.

netstat -a

للعثور على PID من العملية التي تحتوي على منفذ مفتوح (على افتراض أنك تعرف المنفذ)، و

kill -9 $pid

لقتل العملية.

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