使用socketio从goroutine返回值

问题描述

我目前正在开发一个桌面应用程序,该应用程序使用Electron并通过websocket与Go二进制文件进行大部分后端计算的通信。

例如,我有

import (
    "fmt"
    socketio "github.com/googollee/go-socket.io"
)

func foo() bool {
    fmt.Println("Hello World!")
    return true
}

我将使用go-socket模块代表我的websocket服务器

server.OnEvent("/","test",func(s socketio.Conn,value string) bool {
    return foo()
}

我的应用程序非常大且很深,因此为了简单起见,我已将一般概念降至最低。我希望将foo()作为goroutine运行,并将给定的值返回到我的套接字服务器。

做到这一点的最佳方法是什么?

编辑

现在,我已经考虑了更多,我相信最好不要返回foo()的值,而应将其作为goroutine启动,而是将响应发送到前端的单独接收器,结束。

解决方法

您可以这样做,但可能不是一个好方法:

server.OnEvent("/","test",func(s socketio.Conn,value string) bool {
    c := make(chan bool)
    var x bool
    go func() {
        x = foo()
        c <- true
    }()
    <-c

    return x
}

我已经使用通道首先执行goroutine。成功执行goroutine之后,将执行主例程。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...