คุณสร้างเว็บแอปพลิเคชันใน Clojure ได้อย่างไร [ปิด]


216

ฉันคิดว่านี่เป็นคำถามแปลก ๆ สำหรับโปรแกรมเมอร์ส่วนใหญ่ที่ทำงานกับ Java ทุกวัน ฉันไม่. ฉันรู้ภาษา Java เพราะฉันทำงานกับโปรเจ็กต์ Java แต่ไม่ใช่ Java-the-world ฉันไม่เคยสร้างเว็บแอปตั้งแต่เริ่มต้นใน Java ถ้าฉันต้องทำกับ Python, Ruby ฉันรู้ว่าต้องไปที่ไหน (Django หรือ Rails) แต่ถ้าฉันต้องการสร้างเว็บแอปพลิเคชันใน Clojure ไม่ใช่เพราะฉันถูกบังคับให้อยู่ในโลก Java แต่เพราะฉัน ชอบภาษาและฉันต้องการลองใช้ฉันควรใช้ไลบรารี่และกรอบงานใดบ้าง


1
ฉันสงสัยว่าคุณต้องการใช้ Java Native API หรือ Clojure Native หรือไม่
Ande Turner

Ande: ฉันไม่แน่ใจจริง ๆ เพราะฉันรู้น้อยเกี่ยวกับโลกของ Java ในแง่นี้ (แต่ฉันใช้ Java ภาษาอยู่ระยะหนึ่งแล้ว)
pupeno

ฉันคิดว่ามันคงจะดีถ้าคำถามนี้จบลงด้วยรายชื่อเฟรมเวิร์กเว็บของ Clojure หนึ่งคำตอบแต่ละข้อและใครก็ได้สามารถโหวตพวกเขาชื่นชอบได้ ฉันคิดว่า Meredydd เป็นคำตอบที่แน่นอนของ Compojure ฉันจะเพิ่มอีกหนึ่งรายการสำหรับ Webjure และมันก็ดีที่มีการเปรียบเทียบ
pupeno

Pupeno! ฉันมาที่นี่เพื่อค้นหา "เว็บแอปพลิเคชันที่มี clojure" หน้านี้เป็นผลการค้นหาครั้งแรกใน Google
Sebastián Grignoli

2
ดูที่คำถามที่เกี่ยวข้องstackoverflow.com/questions/3325033/…
Petr Gladkikh

คำตอบ:


104

เท่าที่กรอบเว็บ Clojure ที่ดีที่สุดที่ฉันยังพบคือ Compojure: http://github.com/weavejester/compojure/tree/master

มันเล็ก แต่ทรงพลังและมีรูปแบบที่สง่างาม (ใช้ Jetty ภายใต้ประทุน แต่ซ่อน Servlet API จากคุณยกเว้นคุณต้องการซึ่งจะไม่บ่อย) ไปที่ README ที่ URL นั้นจากนั้นดาวน์โหลดสแนปชอตและเริ่มเล่น


16
ความเห็นของริชาร์ดมีความหมายสำหรับคำตอบนี้หรือไม่? ฉันไม่เข้าใจ
John Cromartie

26
@Richard ข้อโต้แย้งของคุณค่อนข้างโง่ ใช่ถ้าคุณตัดสินใจที่จะใช้ไลบรารีจาวาคุณกำลังเลิกใช้งานในหลาย ๆ กรณี แต่จุดของห้องสมุดเหล่านี้เพื่อให้คุณไม่ต้องทำมันอีกครั้ง ตัวอย่างเช่น Ring เป็นตัวหุ้ม Clojury รอบ ๆ servlets ดังนั้นคุณไม่ต้องใช้ servlets โดยตรง คุณจะเสนอให้เราคิดค้นนวัตกรรมการพัฒนาเว็บใหม่ตั้งแต่เริ่มต้นแทนที่จะสร้างเครื่องมือ Java ที่ดีอย่างสมบูรณ์แบบที่น่าใช้จาก Clojure หรือไม่? ตรรกะอยู่ตรงไหน นอกจากนี้การมีตัวเลือกในการใช้ห้องสมุดเหล่านี้เป็นสิ่งที่ไม่ดีอย่างไร ...
Rayne

15
@Richard อาร์กิวเมนต์ทั้งหมดของคุณบอกเป็นนัยว่าโค้ดที่ไม่ใช่ Clojure ที่ใช้งานไม่ได้นั้นแย่มากจนแม้แต่การมีอยู่ของมันที่ซ่อนอยู่ใต้ไลบรารีก็เป็นการปนเปื้อน ฉันไม่เข้าใจเหตุผลนี้ ไลบรารี Java จำนวนมากมีโค้ดที่มีประโยชน์และมีประสิทธิภาพ เหตุใดจึงต้องเขียนสิ่งเหล่านี้ตั้งแต่ต้นเมื่อเราสามารถจัดหาห้องสมุดผู้ห่อหุ้มของเราเองที่ทำให้สามารถใช้งานได้อย่างหรูหราและเป็นประโยชน์จาก Clojure
Rayne

10
@ ริชาร์ดอย่าลังเลที่จะสร้างเซิร์ฟเวอร์ http บริสุทธิ์
gtrak

5
ในเงื่อนไข Lisp / Clojure ฟังก์ชั่นไม่มีผลข้างเคียง (ดูgigamonkeys.com/book/… ) อย่างไรก็ตามตามที่กล่าวไว้ใน Land of Lisp ( landoflisp.com/trade_func.png ) โปรแกรมที่ใช้งานได้จริงล้วนไม่มีประโยชน์มากเพราะผลข้างเคียงที่จำเป็นต่อการทำสิ่งต่าง ๆ เช่นเขียนบันทึกฐานข้อมูลดาวน์โหลดไฟล์โพสต์ไปที่ เซิร์ฟเวอร์ REST, สร้างภาพ ฯลฯ ...
lfalin

179

Compojure ไม่ใช่กรอบงานที่สมบูรณ์สำหรับการพัฒนาเว็บแอปพลิเคชันอีกต่อไป ตั้งแต่การเปิดตัว 0.4 คอมโพสิตได้ถูกแยกออกเป็นหลายโครงการ

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

(def app [req]
  (if (= "/home" (:uri req))
    {:status 200
     :body "<h3>Welcome Home</h3>"}
    {:status 200 
     :body "<a href='/home'>Go Home!</a>"}))

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

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

(defroutes my-routes
  (GET "/" [] "<h1>Hello all!</h1>")
  (GET "/user/:id" [id] (str "<h1>Hello " id "</h1>")))

Compojure ยังคงทำงานกับแผนที่คำขอ / ตอบสนองเพื่อให้คุณสามารถเข้าถึงได้ตลอดเวลาหากต้องการ:

(defroutes my-routes
  (GET "*" {uri :uri} 
           {:staus 200 :body (str "The uri of the current page is: " uri)}))

ในกรณีนี้ส่วน {uri: uri} เข้าถึงคีย์: uri ในแผนผังคำขอและตั้งค่า uri เป็นค่านั้น

องค์ประกอบสุดท้ายคืออาการสะอึกซึ่งทำให้การสร้าง html ง่ายขึ้น แท็ก html ต่างๆจะแสดงเป็นพาหะด้วยองค์ประกอบแรกที่แสดงชื่อแท็กและส่วนที่เหลือเป็นส่วนของแท็ก จะกลายเป็น"<h2>A header</h2>" [:h2 "A Header"]คุณลักษณะของแท็กอยู่ในแผนที่เสริม จะกลายเป็น"<a href='/login'>Log In Page</a>" [:a {:href "/login"} "Log In Page"]นี่คือตัวอย่างเล็ก ๆ ที่ใช้เทมเพลตเพื่อสร้าง html

(defn layout [title & body]
  (html
    [:head [:title title]]
    [:body [:h1.header title] body])) 

(defn say-hello [name]
  (layout "Welcome Page" [:h3 (str "Hello " name)]))

(defn hiccup-routes
  (GET "/user/:name" [name] (say-hello name)))

นี่คือลิงค์ไปยังร่างคร่าวๆของเอกสารบางอย่างที่กำลังถูกเขียนโดยผู้เขียน Compojure ซึ่งคุณอาจพบว่ามีประโยชน์: Compojure Doc


48

นอกจากนี้ยังมี "Noir" ( http://www.webnoir.org/ ) ซึ่งเป็นกรอบเว็บ Clojure ใหม่ (ดังนั้นเอกสารใหม่ยังไม่ได้มี) มาจาก Django / Rails ฉันขุดไวยากรณ์ที่เรียบง่ายตรงไปตรงมาและมันค่อนข้างผอม


Webnoir มีประโยชน์จริง ๆ ! มันง่ายมากที่จะเริ่มต้นด้วย - คุณสามารถพัฒนาได้เล็กน้อยเหมือนที่ดูเหมือนว่าจะพัฒนา php - เพียงแค่เริ่มต้นเซิร์ฟเวอร์ (คราวนี้มี leiningen) แก้ไขไฟล์ของคุณและโหลดเบราว์เซอร์ของคุณใหม่เพื่อดูสิ่งที่คุณได้รับ
claj

ตั้งแต่ @elithrar ได้ตอบไปตอนนี้นัวมีเอกสารอยู่แล้ว: webnoir.org/docs
Alistair Collins

18
เพียงบันทึกดูเหมือนว่านัวร์ได้รับการคัดค้านและไม่ได้รับการบำรุงรักษาอีกต่อไป ....
SolarBear

25

พิจารณากรอบเว็บ Luminus ฉันไม่มีส่วนเกี่ยวข้อง แต่เคยได้ยินสิ่งดีๆจากเพื่อนที่ฉันเคารพ


20

ปัจจุบันไปสู่ห้องสมุดเว็บของฉันตอนนี้คือญาดา

Compojureหากคุณเป็นเพียงการเริ่มต้นออกเซิร์ฟเวอร์เบื้องต้นคือ ฉันเห็นว่าเป็นapacheเว็บเซิร์ฟเวอร์ในโลก Clojure (ซึ่งในกรณีนี้ yada / aleph จะเป็น nginx) คุณสามารถใช้Luminusเป็นแม่แบบ compojure-apiมีสายพันธุ์ของมันเช่น

ฉันลองคุณPedestalและพอใจกับมันทั่วโลก ฉันไม่ได้อ้างว่าเป็นผู้เชี่ยวชาญ แต่มันมีรูปแบบที่น่ารื่นรมย์รู้สึกเหนียวแน่นและดูเหมือนว่ามันจะมีประสิทธิภาพที่ยอดเยี่ยม มันได้รับการสนับสนุนโดยCognitect(บริษัท Clojure / Datomic ที่ Rich Hickey ทำงาน)

ฉันพบว่าAlephมีการนำเสนอสิ่งที่เป็นนามธรรมที่น่าสนใจและความกดดันในตัวดูเหมือนว่าน่าสนใจ ฉันยังไม่ได้เล่นกับมัน แต่แน่นอนในรายการของฉัน

หลังจากเล่นไปกับเว็บเซิร์ฟเวอร์ต่าง ๆ นี่คือรายการ Pro / Cons ด่วนของฉัน:

คำตอบสั้น ๆ : ดูที่Luminusเพื่อเริ่มต้นอย่างรวดเร็วอาจไปยังสิ่งอื่นตามความต้องการของคุณวิวัฒนาการ (บางที Yada)

Compojure

  • ข้อดี (1):

    • ง่ายเทมเพลต / ตัวอย่างมากมาย (ตัวอย่างเช่นเรืองแสง)
  • ข้อเสีย (2):

    • ไม่ใช่นักแสดง (เธรดต่อคำขอ) คาดว่าจะมีประสิทธิภาพที่ดีกว่ารางเล็กน้อย
    • ไม่ง่ายรุ่นมิดเดิลแวร์มีความไม่สะดวก

แท่น

  • ข้อดี (3):

    • โมเดล interceptor, ไวยากรณ์ที่น่ารื่นรมย์เพื่อเพิ่ม interceptors ไปยังชุดย่อยของเส้นทาง
    • เราเตอร์นักแสดง
    • รองรับรูปแบบ json / Transit / multipart อย่างชัดเจนโดยไม่ต้องขออะไร เจ๋งมาก!
  • ข้อเสีย (4):

    • ไม่มีการสนับสนุน websocket (ยัง) การส่งคืนช่อง core.async จะดี
    • ค่อนข้างช้าในการโหลดซ้ำถ้าวางไว้ในองค์ประกอบของ Stuart Sierra (ฉันคิดว่าคุณควรใช้ interceptor โหลดซ้ำ)
    • ไม่มีเครื่องมืออำนวยความสะดวกในการทดสอบสำหรับตัวรับสัญญาณ async
    • ต้องซื้อแบบ (?)

Aleph

Pro (3):

  • performant
  • backpressure
  • การสนับสนุน Websocket / SSE เมื่อส่งคืนสตรีมที่หลากหลาย

ข้อเสีย (1):

  • ระดับต่ำทำแบบของคุณเอง (เช่นมันแค่ให้วิธีที่จะทำให้ตัวจัดการของคุณทำบางสิ่งบางอย่างไม่มีเราเตอร์ไม่มีอะไรเลย) ไม่ใช่ข้อเสียจริงๆเพียงแค่ตระหนักถึงมัน

ญาดา

Pro (3):

  • สร้างขึ้นบน Aleph
  • การเชื่อมโยงเนื้อหา
  • บูรณาการกร่าง
  • bidi ค่อนข้างโอเค (แม้ว่าฉันชอบไวยากรณ์เราเตอร์ที่ดีขึ้น)

ข้อเสีย (1):

  • เอกสาร (แม้ว่าจะไม่เลวร้ายเท่า nginx-clojure แต่ก็ปรับปรุงอย่างรวดเร็ว)

HttpKit

Pro (2):

  • เขียนใน Clojure! (และ Java ... )
  • ประสิทธิภาพดูดี (ดูโพสต์การเชื่อมต่อพร้อมกัน 600K)

ข้อเสีย (2):

  • ไม่รองรับ CORS
  • บัก นอกจากนี้ยังไม่ได้กระทำล่าสุด

Nginx-Clojure

หมายเหตุ: ฉันไม่ได้เล่นกับมันส่วนใหญ่เป็นเพราะขาดเอกสาร มันดูน่าสนใจและมีประสิทธิภาพมาก

ข้อดี (2):

  • Nginx (นักแสดง, offload ssl, เริ่มทำงานใหม่ ... )
  • รุ่นนี้สามารถอัปเดตเป็นศูนย์ได้หรือไม่? นั่นจะยอดเยี่ยมมาก!

ข้อเสีย (1):

  • เอกสาร (ปรับปรุง) นอกจากนี้ฉันไม่ต้องการเขียนโปรแกรมในสตริงที่ฝังอยู่ในไฟล์กำหนดค่า nginx หากเป็นวิธีเดียวที่จะทำได้
  • อาจซับซ้อนเล็กน้อยในการปรับใช้ครั้งแรก (?)

Immutant

หมายเหตุ: ฉันไม่ได้เล่นกับมัน

ข้อดี :

  • รวม (แคช, การส่งข้อความ, การตั้งเวลา, การปรับใช้ wildfly)

ข้อเสีย:

  • ไม่มีไคลเอนต์ http

Catacumba

หมายเหตุ: ฉันไม่ได้เล่นกับมันแม้ว่าเอกสารจะดูดี ฉันอาจจะลองต่อไป มีตัวอย่างโครงการการแชทที่ดูน่าสนใจการใช้โปรโตคอลหนัก ๆ ของพวกเขาทำให้ฉันออกในตอนแรกในฐานะมือใหม่ Clojure dev

ข้อดี (6):

  • เอกสาร! เช่นเดียวกับโครงการ funcool ทั้งหมด doc เป็นที่น่าพอใจมากที่จะอ่าน
  • ไวยากรณ์การกำหนดเส้นทางเหมือนฐาน
  • ควรเป็นนักแสดง (บน Ratpack)
  • backpressure
  • websockets, sse, cors, ความปลอดภัย, ssl ...
  • คุณสมบัติที่เป็นเอกลักษณ์ในการขุด: ไปรษณีย์

ข้อเสีย (2):

  • ไม่แน่ใจว่าไวยากรณ์ ct / เส้นทางที่น่าพอใจเป็นอย่างไรและเกี่ยวกับการโยนข้อมูลจำเพาะของ Ring (คาดว่าเป็นเรื่องราวของ async แต่ฉันคิดว่าคนที่อยู่บนฐานคงที่)
  • ไม่แน่ใจว่าจะรวมเข้าด้วยกันได้อย่างไร
  • เมื่อฉันลองมันฉันไม่สามารถทำงานได้ทันที

หมายเหตุ : มาตรฐานของเว็บเซิร์ฟเวอร์ Clojureจะมีให้หากประสิทธิภาพที่แท้จริงนั้นสำคัญ


การเปรียบเทียบที่ดี ไม่แน่ใจว่าคำอุปมา Nginx ทำงานแม้ว่า :)
matanster

1
@matanster ฉันเห็น apache เป็นเซิร์ฟเวอร์ go-to default สำหรับองค์กรจำนวนมาก เรียบง่ายใช้งานได้สำหรับหลาย ๆ คน แต่มันเก่ากว่า nginx ด้วยและใช้โมเดลภายในที่แตกต่างกัน Compojure เป็นแบบซิงโครนัส (ซึ่งอาจมีการเปลี่ยนแปลง) ในขณะที่ Yada เป็นแบบอะซิงโครนัส ข้อดีอีกอย่างของ Yada ที่ฉันไม่ได้กล่าวถึงคือทุกอย่างเป็นข้อมูลดังนั้นจึงง่ายกว่ามากในการเขียน / แปลง / ตรวจสอบ / สร้างเมื่อเทียบกับมาโครเช่นเดียวกับใน Compojure
nha

14

ทุกวันนี้Pedestalเป็นกรอบที่ควรพิจารณา มันเป็นเฟรมเวิร์กฝั่งเซิร์ฟเวอร์ที่สร้างอยู่ด้านบนของRingแต่ยังทำให้การร้องขอที่เข้ามาจากเธรดเริ่มต้นสามารถหยุดและดำเนินการต่อการร้องขอนั้นได้ อาจจะจัดเรียงของเช่น JavaBean

กรอบเย็นอื่น ๆ ที่มีhoplon.ioและเดวิด Nolen ของอ้อม (ขึ้นอยู่กับการตอบสนอง)


11

Webjureเว็บเฟรมเวิร์กการเขียนโปรแกรมสำหรับ Clojure

คุณสมบัติ: ส่ง servlet เรียกฟังก์ชั่น Clojure การสร้าง HTML แบบไดนามิก อินเตอร์เฟสเคียวรี SQL (ผ่าน JDBC)

คำตอบนี้มีความหมายในฐานะตัวแทนสำหรับข้อมูล Webjure


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

8

Compojure คือสิ่งที่ฉันใช้ในการสร้างแอปพลิเคชันบล็อกขนาดเล็ก มันเป็นแบบจำลองบน Sinatra ซึ่งเป็นกรอบงานเว็บที่มีน้ำหนักเบาสำหรับ Ruby ฉันส่วนใหญ่ใช้การกำหนดเส้นทางซึ่งเหมือนกับของซินาตร้า ดูเหมือนว่า:

(GET "/post/:id/:slug"
  (some-function-that-returns-html :id :slug))

ไม่มี ORM หรือไลบรารี่ templating แต่มีฟังก์ชั่นที่เปลี่ยนเวกเตอร์เป็น HTML


5

คุณยังสามารถดูกรอบเหล่านี้ (นำมาจากการแยกแยะ / โครงการ ):

ยังมีอีกหนึ่งคำถามที่เกี่ยวข้องกับ Stack Overflow: เฟรมเวิร์กเว็บ Clojure ผู้ใหญ่หรือไม่


1
Twister เขียนด้วยภาษา Go ไม่ใช่ Clojure
hipertracker

3

ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้เขียน

ฉันรวบรวมเทมเพลต leiningen ซึ่งรวมแม่แบบ luminusweb และเกาลัดเข้าด้วยกัน ดังนั้นคุณจะได้รับสิ่งที่คุณสามารถสร้างรหัส clojure ด้วยและรหัส clojurescript สำหรับด้านหน้าและด้านหลัง
นอกจากนี้ยังมีการจัดการผู้ใช้รวมถึงการสร้าง CRUD ที่เรียบง่ายและมีความสุขเล็ก ๆ น้อย ๆ : https://github.com/sveri/closp


3

ฉันจะโยนสองเซ็นต์ให้Ductด้วยเช่นกันจาก@weavejesterผู้ดูแล Compojure และ Ring

ที่แกนกลางของมันจะนำส่วนประกอบและเราเตอร์แหวนภายใต้หลังคาเดียวกัน เหตุผลที่ฉันใช้ Duct:

  • รากฐานปรัชญาที่ยอดเยี่ยม: มันสนับสนุนให้คุณสร้างแอปของคุณเป็นชุดของส่วนประกอบขนาดเล็กและมันสร้างความสมดุลที่ดีระหว่างการถือความคิดเห็นเล็กน้อยในขณะที่ให้ค่าเริ่มต้นที่มีสติ
  • เส้นทางที่เสถียร: ฉันพูดเพื่อตัวเอง แต่ในช่วงหลายปีที่ผ่านมาฉันรู้สึกว่าชุมชน Clojure ได้นำเสนอกรอบเว็บที่น่าเชื่อถือน้อยกว่ากรอบอื่น ๆ คู่ของฉันรู้สึกว่าเป็นการทดลองเกินไป (ประสบการณ์ของฉันกับ Om และ Pedestal ฝั่งไคลเอ็นต์) สำหรับ "ทำให้สิ่งต่าง ๆ สำเร็จ" (ไม่ใช่ว่าพวกเขาจะไม่ได้พิสูจน์ว่าเหนือกว่าถนน) ในทางกลับกันฉันรู้สึกว่า @weavejester ได้นำความมั่นคงแบบเดียวกันและวัดความก้าวหน้ามาสู่ Duct ที่เขาทำกับ Compojure และ Ring ซึ่งเกิดมาอย่างยอดเยี่ยมในชุมชน
  • มันเป็นซุปเปอร์น้ำหนักเบาและออกจากทางของส่วนประกอบของฉัน

คุณสมบัติที่สำคัญ:

  • จัดเส้นทางโดย "ปลายทาง" ซึ่งเป็นส่วนประกอบขนาดเล็กที่คุณสามารถนึกได้ว่าเป็นเว็บเซิร์ฟเวอร์ขนาดเล็ก (หรือส่วนข้ามขนาดเล็กของเส้นทาง HTTP ของคุณ)
  • สนับสนุน out-of-the-box สำหรับReloaded เวิร์กโฟลว์
  • ผสมผสานอย่างสมบูรณ์แบบด้วย Ring และ Compojure
  • การกำหนดค่าการพัฒนาและการผลิต (สิ่งที่ฉันพบว่าขาดหายไปจากที่อื่นอย่างชัดเจน)
  • เอกสารที่ดีพร้อมตัวอย่าง

หมายเหตุ:ไม่ต้องพูดอะไร แต่เพื่อประโยชน์ของผู้มาใหม่ในการพัฒนาเว็บเช่นเดียวกับสิ่งส่วนใหญ่ของ Clojurey Duct ต้องการความเข้าใจอย่างลึกซึ้งของภาษา Clojure ฉันยังแนะนำให้อ่านเกี่ยวกับองค์ประกอบก่อน

ในบันทึกส่วนตัวอื่นฉันใช้ Duct ในแอปพลิเคชั่นการผลิตหลายรายการมานานกว่าหนึ่งปีแล้วและมีความสุขมาก



2

อีกประการหนึ่งที่น่าสนใจคือเว็บเซิร์ฟเวอร์Http ชุด มันมีประสิทธิภาพที่ดีและเป็นไปตามแหวนและมีการรองรับ WebSockets เช่นกัน มันทำส่วนใหญ่ใน clojure และขาดบางสิ่งที่แปลกใน Jetty / Tomcat

ง่ายต่อการคนจรจัดด้วย



1

Arachneเป็นเว็บเฟรมเวิร์กที่มาใหม่ อ้างถึงคำอธิบายของเว็บไซต์:

Arachne เป็นเฟรมเวิร์กการพัฒนาเว็บแบบโมดูลาร์ที่สมบูรณ์แบบสำหรับ Clojure มันเน้นความง่ายเรียบง่ายและการออกแบบที่แข็งแกร่งปรับขนาดได้

มันมี แคมเปญ kickstarter ที่ อ้างว่ามอบประสบการณ์ "เริ่มต้นใช้งาน" ที่คล้ายกับ Rails มันพัฒนาโดย Cognitect

นี่คือการสนทนาที่ดีเกี่ยวกับเรื่องนี้กับผู้เขียน Luminus (yogthos)


1

ฉันใช้Liberatorประสบความสำเร็จในการผลิตมาระยะหนึ่งแล้ว เป็นกรอบที่ยอดเยี่ยมถ้าคุณต้องการเพียงแค่กระดูกเปลือยเช่นถ้าคุณกำลังสร้างบริการเว็บสงบหรือสิ่งที่คล้ายกัน มันเป็นเสื้อคลุมสำหรับแหวนและคอมโพสิตและให้กราฟการตัดสินใจเมื่อตรวจสอบคำขอที่เข้ามา นอกจากนี้ยังเร็วมากเมื่อเทียบกับกรอบเว็บขนาดใหญ่อื่น ๆ หากคุณต้องการเริ่มต้นอย่างรวดเร็วและค่อย ๆ สร้างออกมาแล้ว Liberator เป็นตัวเลือกที่ยอดเยี่ยม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.