【发布时间】:2026-02-17 05:15:01
【问题描述】:
我正在尝试在 Go 中实现以下功能。
我有一个带有表单的网页,用于上传 .csv 文件。 Gorilla mux 用于路由到一个处理程序,该处理程序获取文件并对其进行解析,对数据进行一系列操作,最后生成一个报告,其中包含解析的行数、被拒绝的行数等。
我的问题是,即使它可以在我的机器上运行,但在服务器上,Apache 会在我完成所有操作之前超时:文件上传本身不是问题,但我必须等待转换关于要完成的数据。
我尝试使用 Gorilla websocket 从进程中获取反馈(例如,增加解析和处理的行数)并保持连接打开,但这是一个 POST 请求,Gorilla websocket 不会从除非有 GET 请求,否则 http 到 websocket。
我什至不确定我是否在使用 websockets 做这类事情的正确轨道上。
我可以有一个处理本身的 goroutine 并在 goroutine 完成之前返回处理程序,但是我如何在 UI 中显示处理的结果?
所以在这个阶段,我的问题归结为:在 Go 中,当您需要时,最好的方法是什么:
- 上传文件,
- 等待漫长的过程完成
- 并在网页中显示结果?
非常感谢您提供有关正确方向的线索。
【问题讨论】:
-
POST 后重定向?为您的应用程序返回一个 URL 以获取 websocket,或者甚至只是轮询完成?
-
这不是一个真正的 Go 问题:你的 Go 部分已经关闭,这实际上是一个通用的 Web 开发问题,即“你如何呈现一个长期运行的结果-结束进程给用户”。这样做有很多选择,使用哪一种主要取决于您的特定用户体验决策。
-
@Adrian:您可能是对的,但是您能指出其中的 1 个或 2 个选项吗?那会很有帮助。
-
JimB 已经列出了 3 个,但我会尽快发布更多信息。