如何使 go fasthttp 服务器在文件上传时更快地触发处理程序?
How do I make go fasthttp server to trigger the handler faster at a fileupload?
我将 fasthttp
用于文件服务器项目。文件服务器具有上传功能。对于上传文件,我将 key
作为 URL 查询来验证上传权限。
主要():
// start http server
log.Printf("Starting HTTP server on %q", listento)
go func() {
h := &fasthttp.Server{
Handler: requestHandler,
MaxRequestBodySize: 2 * 1024 * 1024 * 1024,
}
if err := h.ListenAndServe(listento); err != nil {
log.Panicf("error in ListenAndServe: %s", err)
}
}()
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
我在 FileUpload 开始时已经收到 File Upload Endpoint Hit
- 完全符合要求,但我真的更喜欢使用 fasthttp
。
我做错了什么吗?
谢谢
对于大文件上传,浏览器发送 Expect: 100-continue header 询问服务器是否可以继续上传。您可以使用 https://godoc.org/github.com/valyala/fasthttp#Server.ContinueHandler 检查权限并允许或拒绝上传。
Fasthttp 将始终在调用处理程序之前读取完整响应。这允许以更少的分配获得更高的性能 API。
我将 fasthttp
用于文件服务器项目。文件服务器具有上传功能。对于上传文件,我将 key
作为 URL 查询来验证上传权限。
主要():
// start http server
log.Printf("Starting HTTP server on %q", listento)
go func() {
h := &fasthttp.Server{
Handler: requestHandler,
MaxRequestBodySize: 2 * 1024 * 1024 * 1024,
}
if err := h.ListenAndServe(listento); err != nil {
log.Panicf("error in ListenAndServe: %s", err)
}
}()
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
我在 FileUpload 开始时已经收到 File Upload Endpoint Hit
- 完全符合要求,但我真的更喜欢使用 fasthttp
。
我做错了什么吗? 谢谢
对于大文件上传,浏览器发送 Expect: 100-continue header 询问服务器是否可以继续上传。您可以使用 https://godoc.org/github.com/valyala/fasthttp#Server.ContinueHandler 检查权限并允许或拒绝上传。
Fasthttp 将始终在调用处理程序之前读取完整响应。这允许以更少的分配获得更高的性能 API。