Golang Go语言 web 开发问题请教
有一批带有层级关联的文本文件,文件和文件之间也有依赖关系(其实就是 mib 文件)
需要解析其中的层级关系并存入数据库,现在把每一个 mib 文件的解析打包成了一个事务
当一次性解析多个文件时,速度会很慢,造成前端超时
有没有什么方法可以优化一下啊
Golang Go语言 web 开发问题请教
就是并发编程呗?现在把每一个 mib 文件的解析打包成了一个事务,如果按照每个 mib 文件一个并发的话,数据库顶不住啊。我在想怎样实现把结果先返回,然后后台继续解析处理数据。
他意思是你简单加个任务管理的模块,然后把接口拆开。
execTask
status/:task_id
listTask
前端触发就 execTask ,但是不管结果,只管开始,开始了就给个 taskid 返回给前端。
这样前端肯定不会超时了。
如果前端需要知道状态,就让前端去带着 id 查 status
告诉前端,“我”后端已经在做了。他“前端”可以稍后刷新页面查看结果 [进行中] [成功] [失败]
交警 12123 就是这么干的,提醒你一天后再来看违章
我也是这样想的,但是触发 execTask 时怎样让程序去后台解析 mib 文件呢? Goroutine 的话是不是有主死从随的问题。想问一下具体的 go 实现方式,想了好久也没想到好的是实现方式
最简单的,一个独立的协程(在 main 里起和 http 服务不相关联)搞个定时器去扫 mysql 的 task 状态呀。拿到了任务就分配个处理任务的协程。协程完成任务,就改一下 mysql 里 task 的状态
或者方案 2 你找个协程池库,main 里面创建好协程池。
execTask 接口 里把 task 的执行逻辑扔进协程池里,完成了就改 task 状态,把协程归还协程池子。
异步的场景,要多考虑防止重入的情况。
多谢多谢,我去搞一下,弄完来交作业
您好!很高兴看到您对Go语言Web开发感兴趣。Go语言(Golang)以其高效的性能和简洁的语法,在Web开发领域逐渐崭露头角。针对您的提问,以下是一些常见的Go语言Web开发问题及建议:
-
框架选择:Gin是目前最流行的Go Web框架之一,它提供了简洁的API和高效的性能,适合快速构建Web应用。Beego和Echo也是不错的选择,根据项目需求选择合适的框架。
-
数据库操作:GORM是一个流行的Go ORM库,支持多种数据库,简化了数据库操作。如果使用原生SQL,可以使用database/sql包。
-
模板引擎:html/template是Go标准库中的模板引擎,适合生成HTML内容。如果需要更复杂的模板功能,可以考虑使用第三方模板引擎如Pongo2。
-
中间件:在Gin等框架中,中间件可以方便地处理请求日志、身份验证、跨域请求等。
-
部署:Go应用编译为静态二进制文件,部署方便。可以使用Docker容器化部署,提高应用的可移植性和可维护性。
-
性能优化:Go语言具有高效的并发处理能力,利用goroutines和channels可以优化性能。同时,注意代码中的内存泄漏和不必要的资源消耗。
希望这些建议能帮助您更好地进行Go语言Web开发。如果有更具体的问题或需要进一步的帮助,请随时提问。