Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.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
如何使go fasthttp服务器在文件上载时更快地触发处理程序?_Go_Fasthttp - Fatal编程技术网

如何使go fasthttp服务器在文件上载时更快地触发处理程序?

如何使go fasthttp服务器在文件上载时更快地触发处理程序?,go,fasthttp,Go,Fasthttp,我对文件服务器项目使用fasthttp。文件服务器具有上载功能。对于上载文件,我将键作为URL查询传递,以验证上载权限 主体() requestHandler函数: func requestHandler(ctx *fasthttp.RequestCtx) { switch string(ctx.Path()) { case "/uploadx": log.Println("Upload: ["+ctx.RemoteIP().String()+"] ["+

我对文件服务器项目使用
fasthttp
。文件服务器具有上载功能。对于上载文件,我将
键作为URL查询传递,以验证上载权限

主体()

requestHandler函数:

func requestHandler(ctx *fasthttp.RequestCtx) {
    switch string(ctx.Path()) {
    case "/uploadx":    
        log.Println("Upload: ["+ctx.RemoteIP().String()+"] ["+string(ctx.Path())+"]")
    }   
}
我上传了一个大文件,不幸的是,当文件上传过程完成时,
requestHandler
被触发。 但它应该在上传过程开始时触发,因为我想避免有人在没有检查权限的情况下先上传500MB的文件

有没有办法让requestHandler触发得更快?在上传过程开始时

服务器本身接收到HTTP请求的第一部分,所以最大的问题是,为什么
fasthttp
触发
requestHandler
这么晚


我现在尝试了
net/http

mux.HandleFunc("/upload", uploadFile)

func uploadFile(w http.ResponseWriter, r *http.Request) {
    fmt.Println("File Upload Endpoint Hit")
    fmt.Println(r)
}
使用
net/http
我在文件上传开始时就收到了
文件上传端点命中
——与要求完全相同,但我更喜欢使用
fasthttp

我做错什么了吗?
感谢大文件上传,浏览器发送Expect:100 continue标头询问服务器是否可以继续上传。您可以使用检查权限并允许或拒绝上载


Fasthttp将始终在调用处理程序之前读取完整响应。这允许使用更少的分配实现更高性能的API。

问题是浏览器需要发送
Expect:100 continue
否则在完成完全上传之前,检查上传者权限的情况将永远不会发生。我使用JS XHR上传文件。我用GB文件试过了,没有100个文件可以继续。好的,我现在可以实现它并检查它。但是我不需要检查用户的权限,这些用户无论如何都在成员区域中。更重要的是检查用户试图攻击服务器时的权限,并且用户未登录。因此,如果那些用户的浏览器不发送100个文件,他们将上载GB的文件。在这种情况下,恐怕fasthttp不适合您。出于性能原因,fasthttp总是在调用处理程序之前将全文读入内存(或将文件上载到文件)。这可能不会很快改变。是的,这也是我的结论,这就是为什么我转到
net/http
fasthttp
是一个很棒的软件包,使用起来更舒适,这就是我问这个问题的原因,我希望有办法。
mux.HandleFunc("/upload", uploadFile)

func uploadFile(w http.ResponseWriter, r *http.Request) {
    fmt.Println("File Upload Endpoint Hit")
    fmt.Println(r)
}