From f82d259e7bda843fb63ac1a0f6ff1d6bfb187099 Mon Sep 17 00:00:00 2001 From: Owen Jacobson Date: Wed, 9 Dec 2015 20:40:42 -0500 Subject: Remove HTML from the project. (We're no longer using Dokku.) --- .../stop-building-synchronous-web-containers.html | 135 --------------------- 1 file changed, 135 deletions(-) delete mode 100644 .html/dev/stop-building-synchronous-web-containers.html (limited to '.html/dev/stop-building-synchronous-web-containers.html') diff --git a/.html/dev/stop-building-synchronous-web-containers.html b/.html/dev/stop-building-synchronous-web-containers.html deleted file mode 100644 index 85a1e52..0000000 --- a/.html/dev/stop-building-synchronous-web-containers.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - The Codex » - Stop Building Synchronous Web Containers - - - - - - - - -
- - - - - -
-

Stop Building Synchronous Web Containers

-

Seriously, stop it. It's surreally difficult to build a sane ansynchronous service on top of a synchronous API, but building a synchronous service on top of an asynchronous API is easy.

-
    -
  • -

    WSGI: container calls the application as a function, and uses the return - value for the response body. Asynchronous apps generally use a non-WSGI - base (see for example Bottle).

    -
  • -
  • -

    Rack: container calls the application as a method, and uses the return - value for the complete response. Asynchronous apps generally use a non-Rack - base (see this Github ticket).

    -
  • -
  • -

    Java Servlets: container calls the application as a method, passing a - callback-bearing object as a parameter. The container commits and closes - the response as soon as the application method returns. Asynchronous apps - can use a standard API that operates by re-invoking the servlet method as - needed.

    -
  • -
  • -

    What does .Net do?

    -
  • -
-

vs

-
    -
  • ExpressJS: container calls the application as a function, passing a - callback-bearing object as a parameter. The application is responsible for - indicating that the response is complete.
  • -
-

Synchronous web containers are bad API design

-
    -
  • -

    Make the easy parts easy (this works)

    -
  • -
  • -

    Make the hard parts possible (OH SHIT)

    -
  • -
-

Writing synchronous adapters for async APIs is easy

-
def adapter(request, response_callback):
-    synchronous_response = synchronous_entry_point(request)
-    return response_callback(synchronous_response)
-
-

Going the other way is more or less impossible, which is why websocket -support, HTML5 server-sent event support, and every other async tool for the -web has an awful server interface.

-
- - - -
-
- - -comments powered by Disqus -
- - - - - -
- - \ No newline at end of file -- cgit v1.2.3