คำศัพท์ (หรือ“ รูปแบบ”) สำหรับ“ ทำอะไรบางอย่างถ้ายังไม่ได้ทำ” [ปิด]


54

ฟังดูพื้นฐานดีฉันรู้ แต่เมื่อเร็ว ๆ นี้มีเพื่อนร่วมงานคนหนึ่งบอกฉันว่าวิธีการที่เรียกว่าstartHttpServerซับซ้อนเกินไปที่จะเข้าใจเพราะมันเริ่มเซิร์ฟเวอร์เท่านั้นหากยังไม่ได้ทำงาน ฉันพบว่าฉันมีปัญหาเมื่อฉันตอบว่า "จริงจังฉันทำสิ่งนี้มานานหลายสิบปีแล้ว - มันเป็นรูปแบบทั่วไปในการเขียนโปรแกรม" บ่อยครั้งกว่าที่ฉันจะยอมรับว่าเขากลับมาพร้อมกับเอกสารหลักฐานบางอย่างที่แสดงว่าชุมชนการเขียนโปรแกรมทั้งหมดอยู่เบื้องหลังมุมมองของเขาและฉันก็รู้สึกอาย

คำถาม : มีรูปแบบการออกแบบที่จัดทำเป็นเอกสารไว้เบื้องหลังแนวคิดของวิธีการที่ไม่ใช้งานหรือไม่หากการกระทำที่ต้องการมีผลบังคับใช้แล้วหรือไม่? หรือถ้าไม่ใช่รูปแบบจะมีชื่อด้วยหรือไม่? และถ้าไม่มีมีเหตุผลใดที่คิดว่ามันซับซ้อนเกินกว่าที่จะพิจารณาการเขียนวิธีในลักษณะนี้?


6
เสียงเหมือนแคช - และมันมักจะถือว่ามีความซับซ้อนแน่นอน (เห็นฉันจะอธิบายสิ่งที่ $ {} ไปยัง $ {} ใครบางคน? )
ริ้น

8
คุณมี 3 คำตอบที่แตกต่างกัน แต่คำตอบที่ดีที่สุดคือให้ใช้มันทั้งหมด: เปลี่ยนชื่อฟังก์ชั่นเดิมแบ่งรหัสเป็นสองฟังก์ชั่น (ซึ่งหนึ่งในสองชื่อตอนนี้ได้รับชื่อstartHttpServer) และใช่คำว่า "idempotent" ใช้ที่นี่ ดี.
Doc Brown

8
เพื่อนร่วมงานของคุณให้การโต้แย้งประเภทใด คุณสามารถให้ลิงค์ไปหรือไม่
Robert Harvey

5
ฉันอยากรู้ว่าเพื่อนร่วมงานของคุณมาจากที่ใด อย่างน้อยรอบ ๆ Stack Overflow และวิศวกรรมซอฟต์แวร์ฟังก์ชั่นนี้จะมีชื่อที่แย่ที่สุด แต่จะไม่มีพฤติกรรมที่ผิดปกติ โปรดทราบว่าไม่ใช่เพราะบางคนวางบางสิ่งบนบล็อกที่แสดงถึงมุมมองทั้งหมดของชุมชนการเขียนโปรแกรม แม้แต่ชื่อใหญ่อย่างมาร์ตินฟาวเลอร์ก็พูดเรื่องแปลก ๆ เป็นครั้งคราว เราทุกคนเป็นเพียงมนุษย์
T. Sar - Reinstate Monica

4
ฉันคิดว่าวิธีที่ดีกว่าในการคิดเกี่ยวกับ "ทำอะไรบางอย่างถ้ายังไม่ได้ทำ" จะเป็น "ทำให้ระบบอยู่ในสถานะนี้" แน่นอนว่าหากระบบอยู่ในสถานะนั้นอยู่แล้ววิธีการจะไม่ทำอะไรเลย - ซึ่งจะเป็นพฤติกรรมที่คาดหวัง
T. Sar - Reinstate Monica

คำตอบ:


127

ดังที่ NickWilliams ได้กล่าวไปแล้ว : แนวคิดของ OP อธิบายเรียกว่าidempotent (นามIdempotency ) เป็นการปฏิบัติทั่วไปโดยเฉพาะอย่างยิ่งใน API ระดับสูง

แต่: เปลี่ยนชื่อฟังก์ชั่น

แทนที่จะstartHttpServerเรียกมันหรือmakeSureHttpServerIsRunningensureHttpServerIsRunning

เมื่อเรียกใช้ฟังก์ชันstartHttpServerผู้อ่านคาดว่าจะเริ่มต้นเซิร์ฟเวอร์ HTTP เมื่อเรียกสิบครั้งติดต่อกันฉันจะมีเซิร์ฟเวอร์สิบเครื่องที่ทำงานอยู่ ฟังก์ชั่นของคุณไม่ได้ใช้เวลาส่วนใหญ่ นอกจากนี้ชื่อที่มี "start" แนะนำว่าถ้าฉันต้องการเซิร์ฟเวอร์เดียวที่ทำงานอยู่ฉันจะต้องติดตามว่ามีการเรียกใช้ฟังก์ชั่นนี้หรือไม่

เมื่อเรียกใช้งานฟังก์ชั่นmakeSureHttpServerIsRunningฉันคิดว่ามันจะทำสิ่งที่จำเป็นเพื่อให้แน่ใจว่าเซิร์ฟเวอร์ HTTP กำลังทำงานอยู่โดยส่วนใหญ่จะตรวจสอบว่ามันทำงานอยู่หรือไม่และเริ่มต้นใหม่ ฉันยังสันนิษฐานว่าฟังก์ชั่นทำให้แน่ใจว่าเซิร์ฟเวอร์กำลังทำงานจริง (การเริ่มต้นเซิร์ฟเวอร์อาจเกี่ยวข้องกับเวลาที่ยังไม่ได้ทำงาน)


83
นี้. ส่วนตัวฉันใช้ "ตรวจสอบ" แทน ประเด็นก็คือสิ่งนี้ควรเป็นรูปแบบการตั้งชื่อที่เข้าใจในทีมของคุณ
ร่าเริง

3
หรือเริ่มมีข้อยกเว้นหากเริ่มต้นแล้ว like sqlconnection.open
Ewan

9
ฉันมักจะใช้ฟังก์ชั่น "ตรวจสอบให้แน่ใจ" เพื่อ "ทำถ้าไม่ได้"
Kaz

3
ชื่ออื่นฉันมักจะเห็นเป็น getOrCreateSomething ซึ่งสร้างบนสายแรกแล้วก็กลับมาบางสิ่งบางอย่าง
Fabich

5
@aroth คุณแน่ใจหรือว่าคุณไม่คาดหวังให้พยายามหาพอร์ตที่มีอยู่แล้วส่งคืนหรือไม่ หรือเพียงแค่เขียนไม่ดี? ;)
jpmc26

33

EnsureServerRunningเปลี่ยนชื่อเป็น

ชัดเจนอย่างสมบูรณ์และชัดเจนว่ามันทำให้แน่ใจว่ามันกำลังทำงาน (ถ้ามันไม่ได้) โดยไม่ต้องเริ่มต้นใหม่ถ้ามันเป็น

(ทางเลือก: StartServerIfNotRunning?)


1
ผู้โทรส่วนใหญ่เพียง แต่ใส่ใจว่าเซิร์ฟเวอร์กำลังทำงานหลังจากการโทร พวกเขาไม่สนใจ
gnasher729

29

ไม่จริงรูปแบบการออกแบบ แต่ฉันจะเรียกวิธีการของคุณidempotent มักจะมีคำที่ใช้ในการอ้างถึงการโทรทางไกล แต่คำอธิบายดูเหมือนจะตรงกับสิ่งที่คุณกำลังทำ

วิธีการ Idempotent วิธีการยังสามารถมีคุณสมบัติของ "idempotence" ในนั้น (นอกเหนือจากข้อผิดพลาดหรือปัญหาการหมดอายุ) ผลข้างเคียงของ N> 0 คำขอที่เหมือนกันจะเหมือนกันสำหรับคำขอเดียว ( จาก W3.org )

ผลข้างเคียงของเซิร์ฟเวอร์ที่นี่คือเซิร์ฟเวอร์ HTTP นั้นเริ่มต้นขึ้นเมื่อมีการเรียกใช้เมธอด ฉันเห็นว่าไม่มีอะไรผิดปกติกับวิธีการทำเช่นนี้

หากคุณต้องการรูปแบบการออกแบบฉันคิดว่าคุณสามารถเปิดเผย httpServer ของคุณเป็นซิงเกิลตันซึ่งเริ่มต้นเมื่อเริ่มต้น


5
ฟังก์ชันไม่ใช่ idempotentหากเรียกใช้ครั้งเดียวจะเริ่มต้นเซิร์ฟเวอร์ http และการเรียกใช้ครั้งที่สองจะไม่เกิดขึ้น นั่นตรงกันข้ามกับ idempotence อย่างแท้จริง มันจะเป็น idempotent ถ้าทุกการโทรเริ่มต้นเซิร์ฟเวอร์ http ใหม่
Polygnome

36
@Polygnome Wikipedia กำหนด idempotence เป็น f (f (x)) = f (x)ซึ่งโดยทั่วไปตรงกับคำอธิบายของ Nick ฟังก์ชันอินพุตและเอาต์พุตที่นี่จะเป็นสถานะเซิร์ฟเวอร์โดยนัยดังนั้นสถานะ“ เซิร์ฟเวอร์กำลังทำงาน” จะเป็นจุดคงที่สำหรับฟังก์ชั่นนี้ บางทีฉันอาจเข้าใจผิดบทความ Wikipedia ที่นี่คุณสามารถลิงค์ไปยังแหล่งอ้างอิงอื่นได้หรือไม่?
amon

16
@Polygnome: คำตอบนี้ถูกต้อง idempotency หมายถึงฟังก์ชั่นที่มันไม่สำคัญว่าจะถูกเรียกหนึ่งครั้งหรือมากกว่าหนึ่งครั้งผลลัพธ์จะคงเดิม ผลลัพธ์คือบริการ http ที่ทำงานหนึ่งอย่างอิสระจากจำนวนครั้งที่เรียกใช้ฟังก์ชัน
Doc Brown

14
ความสับสนเกิดขึ้นจากความจริงที่ว่า idempotence ที่แกนกลางของมันเป็นแนวคิดทางคณิตศาสตร์ที่ใช้กับฟังก์ชั่น คำจำกัดความนั้นดีและง่ายสำหรับผู้ที่ใช้งานได้ดีกับภาษาที่ใช้งานได้จริง ทันทีที่คุณแนะนำผลข้างเคียงมันจะซับซ้อน - คุณต้องพิจารณาสภาพแวดล้อมที่คุณใช้งานฟังก์ชั่นในรูปแบบของอาร์กิวเมนต์ (โดยปริยาย) และผลลัพธ์ของฟังก์ชัน หากสถานะนั้นไม่ได้ถูกแก้ไขโดยการเรียกไปยังฟังก์ชันเพิ่มเติม idempotent มิฉะนั้นจะไม่เป็นเช่นนั้น ในกรณีนี้สถานะที่เกี่ยวข้องคือ "คือเซิร์ฟเวอร์ http กำลังทำงาน" - ดังนั้นฟังก์ชั่นจึงเป็น idempotent
Voo

10
@ Polygnome ขออภัยคุณผิด Idempotent หมายความว่าคำขอมีผลเหมือนกันไม่ว่าจะถูกดำเนินการครั้งเดียวหรือมากกว่าหนึ่งครั้ง การเริ่มต้นเซิร์ฟเวอร์ N http หากได้รับซ้ำซ้อนของคำขอไม่แน่นอน idempotent
Kaz

7

ในฐานะที่เป็นผู้หนึ่งที่ใช้นี้เครื่องมือ , startHttpServerคุณควรจะพยายามที่จะทำให้มันง่ายที่สุดเนียนไร้รอยต่อที่จะใช้ ...

ตรรกะของฟังก์ชัน

ในทางเทคนิคโดยแยกstartHttpServer's ตรรกะเป็น 2 ฟังก์ชั่นและเรียกพวกเขาแยกทุกสิ่งที่คุณทำคือการย้าย startHttpServer ' s Idempotencyเป็นรหัสเรียกฟังก์ชั่นทั้งสองแทน ... นอกจากนี้ถ้าคุณห่อทั้งตรรกะในฟังก์ชั่นที่สาม (ซึ่งเป็นสิ่งที่ไม่startHttpServerในสถานที่แรก) นี้บังคับให้คุณเขียนโค้ด unDRYed startHttpServerซ้ำมันชี้แจงทุกที่ที่คุณต้องการมีการโทร ในระยะสั้นstartHttpServer ต้องเรียกตัวเองisHttpServerRunningฟังก์ชั่น

ดังนั้นประเด็นของฉันคือ:

  • ใช้งานisHttpServerRunningฟังก์ชั่นเพราะอาจจำเป็นต้องใช้อย่างอิสระต่อไป ...
  • นำไปใช้startHttpServerทำให้สามารถใช้isHttpServerRunningเพื่อกำหนดการกระทำถัดไปของมัน ...

ถึงกระนั้นคุณสามารถstartHttpServerคืนค่าใด ๆ ที่ผู้ใช้ฟังก์ชันนี้อาจต้องการเช่น:

  • 0 => เซิร์ฟเวอร์เริ่มล้มเหลว
  • 1 => เซิร์ฟเวอร์เริ่มต้นสำเร็จ
  • 2 => เซิร์ฟเวอร์เริ่มต้นแล้ว

การตั้งชื่อฟังก์ชั่น

ก่อนอื่นเป้าหมายหลักของผู้ใช้คืออะไร หากต้องการเริ่มต้นเซิร์ฟเวอร์ HTTPใช่ไหม

1*1=1พื้นฐานไม่มีปัญหาโดยตั้งใจที่จะเริ่มต้นสิ่งที่ได้รับการเริ่มต้นแล้วที่อาคา อย่างน้อยสำหรับฉันการเรียกว่า " ensureHttpServerIsRunning" ดูเหมือนไม่จำเป็นอย่างยิ่งในช่วงวิกฤตฉันจะสนใจมากขึ้นว่าชื่อฟังก์ชั่นนั้นยาวเป็นธรรมชาติและน่าจดจำ

ตอนนี้ถ้าคุณต้องการทราบวิธีการทำงานอย่างละเอียดของฟังก์ชั่นภายใต้ประทุนมีเอกสารหรือซอร์สโค้ดสำหรับสิ่งนั้นฉันหมายความว่าสำหรับฟังก์ชั่นอื่น ๆ จาก library / framework / API / etc ...

คุณเรียนรู้ฟังก์ชั่นหนึ่งครั้งในขณะที่เขียนหลาย ๆ ครั้ง ...

ดังนั้นต่อไปผมจะติดกับที่สั้นง่ายและชัดเจนกว่าstartHttpServerensureHttpServerIsRunning


1
โดยเฉพาะอย่างยิ่งเนื่องจากวิธีการต้องใช้อาร์กิวเมนต์การกำหนดค่าบางอย่างเช่นไดเรกทอรีรากการตั้งค่าความปลอดภัยอาจเป็นหมายเลขพอร์ตฉันสบาย 100% กับ "เริ่มต้น" ที่นี่
949300

@ user949300: ผู้เรียกของ "sureHttpServerIsRunning" ไม่สนใจเกี่ยวกับการกำหนดค่าไดเรกทอรีราก ฯลฯ นั่นคือธุรกิจของบุคคลที่ใช้งาน
gnasher729

2
@ gnasher729 สมมติว่าเซิร์ฟเวอร์ http เป็น Singleton ซิงเกิลนั้นชั่วร้าย และอาจไม่เหมาะสมที่นี่ หนึ่งสามารถมีเซิร์ฟเวอร์ได้หลายเครื่องในหลายพอร์ต หากมีเซิร์ฟเวอร์ http เพียงตัวเดียวอย่างแท้จริงวิธีการทั้งหมดนี้คือ IMO การออกแบบที่ไม่ดีควรเริ่มต้นเซิร์ฟเวอร์เพียงครั้งเดียวเมื่อเริ่มต้นโปรแกรม
949300

2

ฉันคิดว่าเพื่อนร่วมงานของคุณหมายความว่าstartHttpServerทำมากเกินไป:

  • ตรวจสอบว่าเซิร์ฟเวอร์ทำงานอยู่หรือไม่
  • เริ่มต้นเซิร์ฟเวอร์หากจำเป็น

นี่คือส่วนที่ไม่เกี่ยวข้องสองส่วนของรหัส ตัวอย่างเช่นมีสถานการณ์ที่คล้ายกันเกิดขึ้นเมื่อแอปพลิเคชันเดสก์ท็อปควรตรวจสอบให้แน่ใจว่าไม่ได้ทำงานอยู่เมื่อเปิดตัว จะมีส่วนหนึ่งของรหัสที่จัดการอินสแตนซ์ของแอป (ตัวอย่างเช่นการใช้ mutex) และรหัสที่จะเริ่มลูปข้อความแอปพลิเคชัน

ซึ่งหมายความว่าคุณจะต้องไม่มีหนึ่งวิธี แต่อย่างน้อยสองวิธี :

  • isHttpServerRunning: boolean
  • startHttpServer

falseจุดเข้าโปรแกรมจะเรียกวิธีแรกและจากนั้นคนที่สองถ้าค่าตอบแทนเป็น ตอนนี้ทุกวิธีกำลังทำสิ่งหนึ่งและสิ่งหนึ่งและง่ายต่อการเข้าใจ


¹หากลอจิกที่จำเป็นต้องรู้หากเซิร์ฟเวอร์ที่ทำงานอยู่นั้นซับซ้อนเกินไปก็อาจต้องแยกออกเป็นหลายวิธี


21
ตอนนี้มีอย่างอื่นที่เรียกฟังก์ชันทั้งสองกำลังทำสองสิ่งรวมถึงการเปิดเผยฟังก์ชั่นแยกต่างหากอาจทำให้เกิดสภาพการแข่งขัน ไม่มีอาหารกลางวันฟรี
whatsisname

1
ถ้านั่นมากเกินไปสำหรับเพื่อนร่วมงานขอให้โชคดี
gnasher729

@ gnasher729: คำตอบนี้ไม่ขัดแย้งกับคุณ - ค่อนข้างตรงกันข้ามมันอาจจะเป็นความคิดที่ดีที่จะรวมการเปลี่ยนชื่อของวิธีการด้วยการแยกมันออกเป็นสอง และตราบใดที่เราไม่เห็นรหัสจริงเราก็ไม่รู้ว่ารหัสนั้นซับซ้อนแค่ไหน
Doc Brown

10
คำตอบนี้ดูเหมือนจะต่อต้านสิ่งที่เป็นนามธรรมและแห้ง เกิดอะไรขึ้นถ้าstartHttpServerมีการเรียกมากกว่าหนึ่งแห่งในรหัส? ควรคัดลอกวางบรรทัดที่คล้ายกันหลายบรรทัดทุกที่หรือไม่ ควรทำสิ่งนี้กับทุกฟังก์ชั่นหรือไม่ ในไม่ช้าโปรแกรมของคุณจะมีขนาดไม่ จำกัด
JacquesB

3
ผมคิดว่าคนแรกที่ผลข้างเคียงของวิธีนี้คือจุดเริ่มต้นของวิธีการที่จะมีลักษณะเหมือนประมาณstartHttpServer if (isHttpServerRunning()){ return; }คุณกำลังตรวจสอบกฎธุรกิจที่ "ไม่ถูกต้องในการเริ่มต้นเซิร์ฟเวอร์ http หากมีการใช้งานอยู่" แต่จากนั้นทำให้ผู้อื่นรับผิดชอบในการบังคับใช้กฎนั้น Ad-hoc startHttpServerซ้ำแล้วซ้ำอีกในทุกสถานที่ที่พวกเขาอาจจะเรียก
aroth

2

เนื่องจากคุณไม่ได้ระบุภาษาใน JavaScript มีหลายไลบรารีที่มีฟังก์ชัน "หนึ่งครั้ง" เช่นขีดล่าง ดังนั้นถ้าเป็นที่คุ้นเคยกับคุณเรียกว่ารูปแบบ "ครั้งเดียว" และอาจเปลี่ยนชื่อวิธีการของคุณ

ตัวเองมามากขึ้นจาก Java คำว่า "แคช" หรือ "การประเมินผลที่ขี้เกียจ" เป็นสิ่งสำคัญ "Idempotent" ถูกต้องทางเทคนิคและเป็นทางเลือกที่ดี esp หากคุณมีพื้นหลังทำงานได้มากขึ้น


อาจไม่เป็น "ครั้งเดียว" หากเซิร์ฟเวอร์สามารถหยุดได้
gnasher729

@ gnasher729 ฉันสามารถจินตนาการที่ไม่ค่อยได้ใช้restartHttpServer()วิธีการ แต่เพียงหยุด - กรณีใช้มีอะไร คุณชอบความล้มเหลวในการเชื่อมต่อเป็นระยะ ๆ ? :-)
user949300

ไม่จำเป็นต้องมีกรณีการใช้งานเพียงแค่หยุดเซิร์ฟเวอร์ HTTP เพราะมันอาจถูกหยุดโดยบางสิ่งภายนอกตัวโปรแกรม - เซิร์ฟเวอร์ HTTP อาจถูกแยกและเสียชีวิตผู้ดูแลระบบอาจหยุดทำงานด้วยตนเองด้วยเหตุผลบางอย่าง ฯลฯ
Dave Sherohman

เดฟความล้มเหลวคือ "พิเศษ" และควรได้รับการจัดการเช่นนี้ นอกจากนี้เนื่องจากความผิดพลาดสามารถเกิดขึ้นได้ทุกที่ทุกเวลารหัสของคุณจะต้องensureRunning()ไม่อยู่ใช่ไหม :-) สำหรับผู้ดูแลระบบหยุดมันมีรหัสอื่นนี้รีสตาร์ทอย่างต่อเนื่องในขณะที่ผู้ดูแลระบบพยายามที่จะแก้ไขหรือแก้ไขสิ่งที่จะน่ารำคาญและผิดอย่างไม่น่าเชื่อ ให้ผู้ดูแลระบบรีสตาร์ทไม่ใช่รหัส
949300

-2

startHttpServerIfNotIsRunningฉันไม่ต้องการ

วิธีนี้เงื่อนไขจะถูกกล่าวถึงอย่างชัดเจนแล้วในชื่อวิธีการ EnsureหรือmakeSureดูเหมือนคลุมเครือเล็กน้อยสำหรับฉันเพราะไม่ใช่การแสดงออกทางเทคนิค ดูเหมือนว่าเราไม่รู้ว่าจะเกิดอะไรขึ้น


ฉันสมมติว่าคุณไม่ใช่เจ้าของภาษา? เพราะมั่นใจว่ามีคำจำกัดความที่แน่นอนของสิ่งที่เรากำลังทำอยู่ แต่ถึงกระนั้นก็ยังเป็นประเด็นที่ยุติธรรมที่เอกสารและ API ไม่ควรกำหนดให้เจ้าของภาษาสามารถเข้าใจได้
Voo

1
ขอบคุณฉันไม่ได้Ensureหมายความว่าอย่างแน่นอน ฉันยังไม่ชอบคำนี้สำหรับการแสดงออกทางเทคนิค Ensureเป็นสิ่งที่มนุษย์ ระบบไม่สามารถรับประกันสิ่งใด ๆ ได้ แต่จะทำในสิ่งที่ควรทำเท่านั้น
Herr Derb

2
@Voo - ฉันเป็นเจ้าของภาษาและไม่แน่ใจว่าหมายถึงอะไร
โจนาธานแคสต์

เนื่องจากทุกคนที่โพสต์ที่นี่สามารถเข้าถึงอินเทอร์เน็ตทำไมพวกเขาไม่ค้นหาคำนิยามของ 'มั่นใจ' หากพวกเขาไม่แน่ใจว่ามันหมายถึงอะไร? เรื่องไม่สำคัญ ... หลายคนแลกเปลี่ยนการใช้ 'มั่นใจ' และ 'มั่นใจ' โดยไม่ทราบว่าการใช้หนึ่งในคำเหล่านั้นอาจทำให้พวกเขา 'ถูกต้องตามกฎหมาย' โดยไม่ได้ตั้งใจในขณะที่คนอื่นจะไม่
Dunk

@jcast: อย่างจริงจัง?
gnasher729

-3

สิ่งที่เพื่อนร่วมงานของคุณควรบอกคุณคือคุณไม่มีวิธีการเขียนเชิงธุรกิจ มันถูกเขียนมาแล้วหลายครั้งและเขียนได้ดีกว่าที่คุณจะเขียน ตัวอย่างเช่น: http://docs.ansible.com/ansible/latest/systemd_module.html https://docs.saltstack.com/th/latest/ref/states/all/salt.states.service.html

จากมุมมองทางสถาปัตยกรรมการมีโค้ดบางส่วนที่จัดการกับเว็บเซิร์ฟเวอร์เป็นเรื่องของฝันร้าย ยกเว้นว่าการจัดการบริการจะเป็นสิ่งที่รหัสของคุณทำ แต่ฉันเดาว่าคุณไม่ได้เขียน monit (หรือ kubernetes หรือ ... )


2
ภาษาคือ Java และวิธีการออกแบบมาเพื่อเริ่มเซิร์ฟเวอร์ที่ฝังอยู่ในสีเทาในแอปพลิเคชัน Jersey แบบสแตนด์อะโลน ฉันไม่ผิดความถูกต้องของความคิดเห็นของคุณเนื่องจากฉันไม่ได้ให้บริบทมากนัก แต่คุณคิดเอามาก ๆ ในการสร้างข้อความของคุณ เป็นเรื่องที่ดีมากที่จะมีวิธีการที่เรียกใช้ท่าเทียบเรือหรือ Grizzly เพื่อเริ่มต้นเซิร์ฟเวอร์
John Calcote

1
มีแอปพลิเคชั่นธุรกิจนับล้านที่รวมเซิร์ฟเวอร์ HTTP ที่โฮสต์โดยตนเองเพื่อให้ API และทั้งหมดนั้นจะต้องมีรหัสง่ายๆที่จริง ๆ แล้วตั้งค่าไลบรารีที่พวกเขากำลังใช้และให้ข้อมูลเช่นอินเทอร์เฟซสำหรับผูกบนพอร์ตใดที่จะใช้การตั้งค่าความปลอดภัย ฯลฯ การมีstartServerฟังก์ชั่นหรือสิ่งที่คล้ายกัน . นั่นไม่ได้หมายความว่าคุณจะเขียนรายละเอียดในระดับต่ำมาก
Voo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.