1.gin长时间不连接,api没响应
当我在windows上,长时间不连接打包好的服务,过后我突然连接不上。
if err := r.Run(":8081"); err != nil {
log.Fatalf("Failed to start server: %v", err)
}
后来更改代码,我现在不会突然无响应。不知道什么原因
server := &http.Server{
Addr: ":8081", // 监听端口
Handler: r, // 使用 Gin 路由
ReadTimeout: 10 * time.Second, // 设置读取超时时间为 10 秒
WriteTimeout: 10 * time.Second, // 设置写入超时时间为 10 秒
}
// 启动 HTTP 服务器
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
// 打印错误信息
panic(err)
}
2.使用exec执行外部命令时,程序不返回超时信息,卡死
使用cmd.Process.Kill()杀携程
func AddTextToImage(inputImage, textFile, outputImage, fontFile string, fontsize int) error {
// 构造ffmpeg命令参数
// -frames:v 1 -update 1
cmdArgs := []string{
"-i", inputImage,
"-vf", fmt.Sprintf("drawtext=textfile='%s':fontcolor=yellow:fontsize=%d:fontfile='%s':x=(W-text_w)/2:y=(H-text_h)/2:shadowx=2:shadowy=2:shadowcolor=black", textFile, fontsize, fontFile),
// "-frames:v", "1",
// "-update", "1",
// "-strict", "-2",
"-y", outputImage,
}
sr := ""
for _, v := range cmdArgs {
sr += v + " "
}
fmt.Println(sr)
cmd := exec.Command(pojo.ResultDir+"\\bin\\ffmpeg.exe", cmdArgs...)
err := cmd.Start()
if err != nil {
fmt.Println("启动命令时出错:", err)
return err
}
done := make(chan error, 1)
go func() {
done <- cmd.Wait()
}()
select {
case <-time.After(2 * time.Second):
fmt.Println("已等待1秒,仍然在执行中,程序将退出。")
// 如果希望杀死正在执行的命令,可以使用以下代码
// 注意:这里只是示例,实际中可能需要根据具体情况进行处理
if err := cmd.Process.Kill(); err != nil {
fmt.Println("杀死命令时出错:", err)
return err
}
case err := <-done:
if err != nil {
fmt.Println("命令执行出错:", err)
return err
} else {
fmt.Println("命令执行完成.")
return nil
}
}
return nil
}