Haskell Warp PerformanceとErlang Misultinのテスト(ファイルの内容を一度読み込んで応答する方法)

私はhaskell warp http
serverのパフォーマンス(1秒あたりのリクエスト)をテストしたいと思います。私はhaskellについて何も知らない。私は以下のerlangコードと同じことをしたい:

  1. ディスクから “page.txt”を1回だけ読み込みます(asciiファイル100kB)
  2. すべてのリクエストでそのファイルの内容を配信しますが、ディスクからリロードすることはありません。

どのようにしてこれを行うには?

アーラン:

-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の例題に遭遇し、ファイルからロードされたコンテンツを使用するように変更する必要があります。

ハスケル:

{-# 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"

助けてください! 🙂

ベストアンサー

Data.ByteString から hGetContents
を使用してファイルの内容を厳密な 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の欠如かもしれません。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です