Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用HTTP.jl发送一个大文件_Http_Stream_Julia_Sendfile - Fatal编程技术网

使用HTTP.jl发送一个大文件

使用HTTP.jl发送一个大文件,http,stream,julia,sendfile,Http,Stream,Julia,Sendfile,我想用和julia实现一个服务器。经过一些计算后,服务器将返回一个“大”文件(大约100 MB)。我希望避免读取内存中的所有文件,然后将其发送给客户端 某些框架允许为此提供特定功能(例如Flask)或允许将内容流式传输到客户端() HTTP.jl中是否也提供了这两个选项的一个?或者任何其他Julia web包 下面是一个测试代码,它读取文件testfile.txt,但我希望避免在内存中加载完整的文件 import HTTP f = open("testfile.txt","w") write(

我想用和julia实现一个服务器。经过一些计算后,服务器将返回一个“大”文件(大约100 MB)。我希望避免读取内存中的所有文件,然后将其发送给客户端

某些框架允许为此提供特定功能(例如Flask)或允许将内容流式传输到客户端()

HTTP.jl中是否也提供了这两个选项的一个?或者任何其他Julia web包

下面是一个测试代码,它读取文件
testfile.txt
,但我希望避免在内存中加载完整的文件

import HTTP

f = open("testfile.txt","w")
write(f,"test")
close(f)

router = HTTP.Router()

function testfun(req::HTTP.Request)  
  f = open("testfile.txt")
  data = read(f)
  close(f)
  return HTTP.Response(200,data)
end

HTTP.register!(router, "GET", "/testfun",HTTP.HandlerFunction(testfun))

server = HTTP.Servers.Server(router)
task = @async HTTP.serve(server, ip"127.0.0.1", 8000; verbose=false)

sleep(1.0)

req = HTTP.request("GET","http://127.0.0.1:8000/testfun/")

# end server
put!(server.in, HTTP.Servers.KILL)

@show String(req.body)
您可以这样使用:

function testfun(req::HTTP.Request)
    data = Mmap.mmap(open("testfile.txt"), Array{UInt8,1})
    return HTTP.Response(200,data)
end
数据
现在在julia看来就像一个普通的字节数组,但实际上在文件中很像,这可能正是您想要的。垃圾回收时,文件将被关闭-如果您有许多请求,并且没有触发垃圾回收,那么您可能会得到许多打开的文件。如果您的请求需要花费很长时间,您可以考虑在请求开始时调用gc-()。