我想测试 haskell warp http 服务器的性能(每秒请求数)。我对haskell一无所知。我想做与下面的 erlang 代码相同的事情:
如何在haskell中做到这一点?
二郎:
-module(test).
-export([start/0]).
start() ->
{ok, Bin} = file:read_file("page.txt"),
misultin:start_link([{port, 3000}, {loop, fun(Req) -> Req:ok(Bin) end}]).
我遇到了这个 haskell 示例,我需要修改它以使用从文件加载的内容。
haskell :
{-# LANGUAGE OverloadedStrings #-}
import Network.Wai
import Network.Wai.Handler.Warp
import Blaze.ByteString.Builder (fromByteString)
import Network.HTTP.Types (status200)
main = run 3000 $ const $ return $ ResponseBuilder
status200
[("Content-Type", "text/plain"), ("Content-Length", "4")]
$ fromByteString "TEST"
请帮忙! :)
最佳答案
以严格的方式读取文件内容 ByteString
使用 hGetContents
来自 Data.ByteString
,然后将其传递给 Blaze 的 fromByteString
:
{-# LANGUAGE OverloadedStrings #-}
import Network.Wai
import Network.Wai.Handler.Warp
import Blaze.ByteString.Builder (fromByteString)
import Network.HTTP.Types (status200)
import System.IO (withBinaryFile, IOMode (..))
import Data.ByteString (hGetContents)
main = do
contents <- withBinaryFile "full/path/to/page.txt" ReadMode hGetContents
run 3000 $ const $ return $ ResponseBuilder
status200
[("Content-Type", "text/plain"), ("Content-Length", "4")]
$ fromByteString contents
我没有让它在 Windows 上使用相对路径,但这可能只是我缺乏 Haskell-fu。
关于performance - Haskell Warp Performance vs Erlang Misultin 测试(如何加载文件内容一次并提供响应),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8111700/