【发布时间】:2019-11-03 15:26:21
【问题描述】:
我有以下代码可以正常工作,问题是当socket.Connect() fails 连接我想停止该进程,我尝试使用以下代码
但它不起作用,即如果套接字连接失败,程序仍然运行。
我想要发生的是,如果 connect 失败,进程 stops 和 channe ......我在这里错过了什么?
func run (appName string) (err error) {
done = make(chan bool)
defer close(done)
serviceURL, e := GetContext().getServiceURL(appName)
if e != nil {
err = errors.New("process failed" + err.Error())
LogDebug("Exiting %v func[err =%v]", methodName, err)
return err
}
url := "wss://" + serviceURL + route
socket := gowebsocket.New(url)
addPass(&socket, user, pass)
socket.OnConnectError = OnConnectErrorHandler
socket.OnConnected = OnConnectedHandler
socket.OnTextMessage = socketTextMessageHandler
socket.OnDisconnected = OnDisconnectedHandler
LogDebug("In %v func connecting to URL %v", methodName, url)
socket.Connect()
jsonBytes, e := json.Marshal(payload)
if e != nil {
err = errors.New("build process failed" + e.Error())
LogDebug("Exiting %v func[err =%v]", methodName, err)
return err
}
jsonStr := string(jsonBytes)
LogDebug("In %v Connecting to payload JSON is %v", methodName, jsonStr)
socket.SendText(jsonStr)
<-done
LogDebug("Exiting %v func[err =%v]", methodName, err)
return err
}
func OnConnectErrorHandler(err error, socket gowebsocket.Socket) {
methodName := "OnConnectErrorHandler"
LogDebug("Starting %v parameters [err = %v , socket = %v]", methodName, err, socket)
LogInfo("Disconnected from server ")
done <- true
}
该进程应该为大约运行 60-90 sec 的进程打开一个 ws 连接(例如执行 npm install),并通过 web socket 获取进程的日志,并在它完成时处理,当然可以处理可能的问题像网络问题或运行进程的一些错误一样发生
【问题讨论】:
-
你在这里使用的 gowebsocket 包是什么? (看起来像这个:github.com/sacOO7/GoWebsocket)
-
@Slabgorb - 是的,如果你认为它是相关的,你能提供一种如何替换它的方法吗?因为答案会很棒
标签: multithreading go websocket channel