Difference between revisions of "Web/Servers"

From HaskellWiki
< Web
Jump to navigation Jump to search
m (Added infobox)
(8 intermediate revisions by 7 users not shown)
Line 2: Line 2:
 
{{Web infobox}}
 
{{Web infobox}}
   
== Hyena ==
+
== happstack-server ==
   
  +
happstack-server contains a low-level HTTP backend, and high-level functions for routing requests, examining request data, and generating responses. happstack-server is part of the Happstack framework, but can be used as an independent entity. The low and high level portions of the server are not cleanly separated into different packages, so it is not the best choice if you only need a low-level backend.
Hyena is a simple web application container that can be used to run Haskell web applications behind more robust web servers like Apache.
 
   
  +
{| class="wikitable"
'''License''' BSD3
 
  +
! License
  +
| BSD3
  +
|-
  +
! Author:
  +
| Happstack team, HAppS LLC
  +
|-
  +
! Maintainer:
  +
| Happstack team <happs@googlegroups.com>
  +
|-
  +
! Home page:
  +
| http://happstack.com
  +
|-
  +
! Documentation:
  +
| http://happstack.com/docs
  +
|-
  +
! Package & repositories
  +
| [http://hackage.haskell.org/package/happstack Hackage] - [http://patch-tag.com/r/mae/happstack Darcs]
  +
|}
   
  +
== Hyena ==
'''Author:''' Johan Tibell <johan.tibell@gmail.com>
 
   
  +
Hyena is a simple web application container that can be used to run Haskell web applications behind more robust web servers like Apache.
'''Maintainer:''' Johan Tibell <johan.tibell@gmail.com>
 
 
'''Announcement''': http://www.haskell.org/pipermail/haskell-cafe/2009-June/063058.html
 
   
  +
{| class="wikitable"
'''Package & repositories'''
 
  +
! License
 
  +
| BSD3
* Hackage: http://hackage.haskell.org/package/hyena
 
  +
|-
* Github: http://github.com/tibbe/hyena
 
  +
! Author
  +
| Johan Tibell <johan.tibell@gmail.com>
  +
|-
  +
! Maintainer
  +
| Johan Tibell <johan.tibell@gmail.com>
  +
|-
  +
! Announcement
  +
| [http://www.haskell.org/pipermail/haskell-cafe/2009-June/063058.html Haskell Cafe]
  +
|-
  +
! Package & repositories
  +
| [http://hackage.haskell.org/package/hyena Hackage] - [http://github.com/tibbe/hyena Github]
  +
|}
   
 
== Snap Server ==
 
== Snap Server ==
Line 33: Line 61:
 
* are interested in contributing to the Snap Framework project.
 
* are interested in contributing to the Snap Framework project.
   
  +
{| class="wikitable"
'''License:''' BSD3
 
  +
! License
  +
| BSD3
  +
|-
  +
! Author
  +
| James Sanders, Gregory Collins, Doug Beardsley
  +
|-
  +
! Maintainer
  +
| snap@snapframework.com
  +
|-
  +
! Package & repositories
  +
| [http://hackage.haskell.org/package/snap-server Hackage] - [http://github.com/snapframework/snap-server Github]
  +
|}
  +
  +
== Warp ==
  +
  +
The fastest Haskell web server, targeting the WAI [[Web/Framework_Interfaces]]
  +
  +
{| class="wikitable"
  +
! License:
  +
| BSD3
  +
|-
  +
! Author:
  +
| Michael Snoyman <michael@snoyman.com>
  +
|-
  +
! Maintainer:
  +
| Michael Snoyman <michael@snoyman.com>
  +
|-
  +
! Announcement:
  +
| http://docs.yesodweb.com/blog/announcing-warp
  +
|-
  +
! Package & repositories
  +
| [http://hackage.haskell.org/package/warp Hackage] - [http://github.com/softmechanics/warp Github]
  +
|}
  +
  +
Example:
  +
  +
<haskell>
  +
{-# LANGUAGE OverloadedStrings #-}
  +
  +
import Network.Wai
  +
import Network.Wai.Handler.Warp
  +
import Network.HTTP.Types (status200)
  +
import Blaze.ByteString.Builder (copyByteString)
  +
import qualified Data.ByteString.UTF8 as BU
  +
import Data.Monoid
  +
import Data.Enumerator (run_, enumList, ($$))
  +
  +
main = do
  +
let port = 3000
  +
putStrLn $ "Listening on port " ++ show port
  +
run port app
   
  +
app req = return $
'''Author:''' James Sanders, Gregory Collins, Doug Beardsley
 
  +
case pathInfo req of
  +
["yay"] -> yay
  +
x -> index x
   
  +
yay = ResponseBuilder status200 [ ("Content-Type", "text/plain") ] $ mconcat $ map copyByteString
'''Maintainer:''' snap@snapframework.com
 
  +
[ "yay" ]
   
  +
index x = ResponseBuilder status200 [("Content-Type", "text/html")] $ mconcat $ map copyByteString
'''Package & repositories'''
 
  +
[ "<p>Hello from ", BU.fromString $ show x, "!</p>"
  +
, "<p><a href='/yay'>yay</a></p>\n" ]
   
  +
</haskell>
* Hackage: http://hackage.haskell.org/package/snap-server
 
* Github: http://github.com/snapframework/snap-server
 

Revision as of 00:38, 5 August 2012

Haskell Web Development

Software:
Servers - Libraries - Frameworks
Deploy - Cloud
Interfaces to frameworks
Databases and Persistence
Testing and Verification
Content Management

Community & Research:
Forums and Discussion
Literature (research, talks and blogs)
Existing Haskell web applications
Ongoing projects and ideas

happstack-server

happstack-server contains a low-level HTTP backend, and high-level functions for routing requests, examining request data, and generating responses. happstack-server is part of the Happstack framework, but can be used as an independent entity. The low and high level portions of the server are not cleanly separated into different packages, so it is not the best choice if you only need a low-level backend.

License BSD3
Author: Happstack team, HAppS LLC
Maintainer: Happstack team <happs@googlegroups.com>
Home page: http://happstack.com
Documentation: http://happstack.com/docs
Package & repositories Hackage - Darcs

Hyena

Hyena is a simple web application container that can be used to run Haskell web applications behind more robust web servers like Apache.

License BSD3
Author Johan Tibell <johan.tibell@gmail.com>
Maintainer Johan Tibell <johan.tibell@gmail.com>
Announcement Haskell Cafe
Package & repositories Hackage - Github

Snap Server

Part of the Snap framework, the Snap server is similar to Hyena in that it provides a very fast low level web server. From the Hackage package:

This is the first developer prerelease of the Snap framework. Snap is a simple and fast web development framework and server written in Haskell. For more information or to download the latest version, you can visit the Snap project website at http://snapframework.com/.

The Snap HTTP server is a high performance, epoll-enabled, iteratee-based web server library written in Haskell. Together with the snap-core library upon which it depends, it provides a clean and efficient Haskell programming interface to the HTTP protocol.

Higher-level facilities for building web applications (like user/session management, component interfaces, data modeling, etc.) are planned but not yet implemented, so this release will mostly be of interest for those who:

  • need a fast and minimal HTTP API at roughly the same level of abstraction as Java servlets, or
  • are interested in contributing to the Snap Framework project.
License BSD3
Author James Sanders, Gregory Collins, Doug Beardsley
Maintainer snap@snapframework.com
Package & repositories Hackage - Github

Warp

The fastest Haskell web server, targeting the WAI Web/Framework_Interfaces

License: BSD3
Author: Michael Snoyman <michael@snoyman.com>
Maintainer: Michael Snoyman <michael@snoyman.com>
Announcement: http://docs.yesodweb.com/blog/announcing-warp
Package & repositories Hackage - Github

Example:

{-# LANGUAGE OverloadedStrings #-}

import Network.Wai
import Network.Wai.Handler.Warp
import Network.HTTP.Types (status200)
import Blaze.ByteString.Builder (copyByteString)
import qualified Data.ByteString.UTF8 as BU
import Data.Monoid
import Data.Enumerator (run_, enumList, ($$))

main = do
    let port = 3000
    putStrLn $ "Listening on port " ++ show port
    run port app

app req = return $
    case pathInfo req of
        ["yay"] -> yay
        x -> index x

yay = ResponseBuilder status200 [ ("Content-Type", "text/plain") ] $ mconcat $ map copyByteString
    [ "yay" ]

index x = ResponseBuilder status200 [("Content-Type", "text/html")] $ mconcat $ map copyByteString
    [ "<p>Hello from ", BU.fromString $ show x, "!</p>"
    , "<p><a href='/yay'>yay</a></p>\n" ]