Go:制作一个可从其他 Go 应用程序调用的守护进程

标签 go daemon

我正在编写一个巨大的单词词典 -> 语言,我拥有的数据,但我需要的是让一个线程运行一个守护进程,用 Go 编写,它将所有这些保存在内存中(是的,我也有那么多内存)并且可以被其他 Go 应用程序“调用”。

我确信这是一种标准类型的操作,但老实说,我以前从未尝试过这样的操作,而且我不太熟悉,不知道在哪里可以找到有关如何执行此操作的信息。

让它作为守护进程运行很容易。我的问题是什么是从另一个 Go 应用程序调用此应用程序的有效方法,这将需要完成数百万次。

我在想一些事情:

connection, err := InitateConnectionToApp()
for _, someword := range mysliceofstrings {
    languageofword := connection.FindIt(someword)
}

然后守护进程以某种方式接收到这个请求,在其映射中查找值并将其返回。

我希望这是有道理的。我尝试在 Google 上查找,但找不到任何特定于 Go 的内容。

如果有人能告诉我从哪里开始,那就太好了。

最佳答案

你可以使用 RPC Go 的标准远程过程调用包。

只需公开您的 api,然后创建一个客户端以远程调用该方法。

从文档中粘贴的简单示例副本:

package server

type Args struct {
    A, B int
}

type Quotient struct {
    Quo, Rem int
}

type Arith int

func (t *Arith) Multiply(args *Args, reply *int) error {
    *reply = args.A * args.B
    return nil
}

func (t *Arith) Divide(args *Args, quo *Quotient) error {
    if args.B == 0 {
        return errors.New("divide by zero")
    }
    quo.Quo = args.A / args.B
    quo.Rem = args.A % args.B
    return nil
}

func main() {
 arith := new(Arith)
 rpc.Register(arith)
 rpc.HandleHTTP()
 l, e := net.Listen("tcp", ":1234")
 if e != nil {
    log.Fatal("listen error:", e)
 }
 go http.Serve(l, nil)
}

关于Go:制作一个可从其他 Go 应用程序调用的守护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25086652/

相关文章:

c - 重新启动 inetd 应该会影响所有 inetd 控制进程的实例

go - 如何比较 Int Var 与结构的内容

select - Go select 语句解决方法中的优先级

java - Yajsw Stop INFO Log message while start stop daemon 在linux下

unix - .NET Core 中的跨平台后台服务(想想 windows 服务/unix 守护进程)?

java - 如何像守护线程一样启动Java主线程?

linux - 如何通过shell脚本在linux中注销服务

高语 : Setting header to null for a file://to http://request not working

Go 结构比较 - reflect.DeepEqual 在 map 上失败?

google-chrome-extension - 全局键盘输入去