GithubHelp home page GithubHelp logo

Build Status Clojars Project BSD licensed GitHub last commit SourceForge

Alt text Nginx-Clojure is a Nginx module for embedding Clojure or Java or Groovy programs, typically those Ring based handlers.

Core Features

The latest release is v0.6.0, more detail changes about it can be found from Release History.

  1. Compatible with Ring and obviously supports those Ring based frameworks, such as Compojure etc.
  2. Http Services by using Clojure / Java / Groovy to write simple handlers for http services.
  3. Nginx Access Handler by Clojure / Java / Groovy
  4. Nginx Header Filter by Clojure / Java / Groovy
  5. Nginx Body Filter by Clojure / Java / Groovy
  6. Nginx Log Handler by Clojure / Java / Groovy
  7. HTTP V2 support in both standard edition and embedded edition which are compiled against Nginx 1.18.0+
  8. Support Java 8, 9, 10, 11, 12, 19
  9. Support to use jdk19 built-in coroutine viz. Continuation
  10. Pub/Sub Among Nginx Worker Processes
  11. Shared Map based on shared memory & Shared Map based Ring session store
  12. Support Sente, see this PR
  13. Support Per-message Compression Extensions (PMCEs) for WebSocket
  14. APIs for Embedding Nginx-Clojure into a Standard Clojure/Java/Groovy App
  15. Server Side Websocket
  16. A build-in Jersey container to support java standard RESTful web services (JAX-RS 2.0)
  17. Tomcat 8 embedding support (so servlet 3.1/jsp/sendfile/JSR-356 websocket work within nginx!)
  18. Dynamic proxying by using Clojure / Java / Groovy to write a simple nginx rewrite handler to set var or return errors before proxy pass or content ring handler
  19. Non-blocking coroutine based socket which is Compatible with Java Socket API and works well with largely existing java library such as apache http client, mysql jdbc drivers. With this feature one java main thread can handle thousands of connections.
  20. Handle multiple sockets parallel in sub coroutines, e.g. we can invoke two remote services at the same time.
  21. Asynchronous callback API of socket/Channel for some advanced usage
  22. Long Polling & Server Sent Events
  23. Run initialization clojure code when nginx worker starting
  24. Support user defined http request method
  25. Compatible with the Nginx lastest most mainline version 1.23.3. (Nginx 1.22.X, 1.20.X, 1.18.x, 1.14.x, 1.12.x, 1.8.x, 1.6.x, 1.4.x is also ok, older version is not tested and maybe works.)
  26. One of benifits of Nginx is worker processes are automatically restarted by a master process if they crash
  27. Utilize lazy headers and direct memory operation between Nginx and JVM to fast handle dynamic contents from Clojure or Java code.
  28. Utilize Nginx zero copy file sending mechanism to fast handle static contents controlled by Clojure or Java code.
  29. Support Linux x64, Linux x86 32bit, Win32, Win64 and Mac OS X. Freebsd version can also be got from Freebsd ports.

By the way it is very fast, the benchmarks can be found HERE(with wrk2).

Jar Repository

Nginx-Clojure has already been published to https://clojars.org/ whose maven repository is

<repository>
  <id>clojars.org</id>
  <url>http://clojars.org/repo</url>
</repository>

After adding clojars repository, you can reference nginx-clojure 0.6.0 , e.g.

Leiningen (clojure, no need to add clojars repository which is a default repository for Leiningen)

[nginx-clojure "0.6.0"]

Gradle (groovy/java)

compile "nginx-clojure:nginx-clojure:0.6.0"

Maven

<dependency>
  <groupId>nginx-clojure</groupId>
  <artifactId>nginx-clojure</artifactId>
  <version>0.6.0</version>
</dependency>

Documents

License

Copyright © 2013-2023 Zhang, Yuexiang (xfeep) and released under the BSD 3-Clause license.

This program uses:

  • Re-rooted ASM bytecode engineering library which is distributed under the BSD 3-Clause license
  • Modified Continuations Library written by Matthias Mann is distributed under the BSD 3-Clause license

nginx-clojure's Projects

avian icon avian

[INACTIVE] Avian is a lightweight virtual machine and class library designed to provide a useful subset of Java's features, suitable for building self-contained applications.

ccw icon ccw

Counterclockwise is an Eclipse plugin helping developers write Clojure code

chronicle-map icon chronicle-map

Replicate your Key Value Store across your network, with consistency, persistance and performance.

jamvm icon jamvm

A fork of inactive project https://sourceforge.net/projects/jamvm/

nginx icon nginx

nginx version specifically patched for nginx-clojure

nginx-access-plus icon nginx-access-plus

nginx module allows limiting access to certain http request methods and client addresses.

nginx-clojure icon nginx-clojure

Nginx module for embedding Clojure or Java or Groovy programs, typically those Ring based handlers.

ring icon ring

Clojure HTTP server abstraction

sente icon sente

Clojure(Script) + core.async + WebSockets/Ajax

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.