performance - Haskell Warp Performance vs Erlang Misultin 测试(如何加载文件内容一次并提供响应)

标签 performance haskell erlang webserver

我想测试 haskell warp http 服务器的性能(每秒请求数)。我对haskell一无所知。我想做与下面的 erlang 代码相同的事情:

  • 仅从磁盘加载“page.txt”一次(ascii 文件 100kB)
  • 为每个请求提供该文件的内容,但不从磁盘重新加载它

  • 如何在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/

    相关文章:

    c++ - 编译器是否优化 C++ 中静态值的 if 语句

    java - 在变化数量的线程中并发重复相同的任务

    java - 从标准牌组的子集中获取每两张牌的组合

    haskell - 在 Haskell 中编写有状态函数

    multithreading - Erlang 如何在不使用操作系统线程的情况下实现并发?

    javascript - 绑定(bind)/取消绑定(bind)事件或使用条件(jQuery)更好吗?

    haskell - 旧 Haskell 代码中的 getArgs 问题

    parsing - 支持一个变量的小型数学类型语言的评估

    erlang - 如何在 Docker 中开发 Erlang Nitrogen 应用程序

    erlang - 使用 "+native"编译的约束/限制是什么?