15.10 基于网络的通道 netchan

备注:Go 团队决定改进并重新打造 netchan 包的现有版本,它已被移至 old/netchanold/ 目录用于存放过时的包代码,它们不会成为 Go 1.x 的一部分。本节仅出于向后兼容性讨论 netchan 包的概念。

一项和 rpc 密切相关的技术是基于网络的通道。类似 14 章所使用的通道都是本地的,它们仅存在于被执行的机器内存空间中。netchan 包实现了类型安全的网络化通道:它允许一个通道两端出现由网络连接的不同计算机。其实现原理是,在其中一台机器上将传输数据发送到通道中,那么就可以被另一台计算机上同类型的通道接收。一个导出器(exporter)会按名称发布(一组)通道。导入器(importer)连接到导出的机器,并按名称导入这些通道。之后,两台机器就可按通常的方式来使用通道。网络通道不是同步的,它们类似于带缓存的通道。

发送端示例代码如下:

exp, err := netchan.NewExporter("tcp", "netchanserver.mydomain.com:1234")
if err != nil {
    log.Fatalf("Error making Exporter: %v", err)
}
ch := make(chan myType)
err := exp.Export("sendmyType", ch, netchan.Send)
if err != nil {
    log.Fatalf("Send Error: %v", err)
}

接收端示例代码如下:

imp, err := netchan.NewImporter("tcp", "netchanserver.mydomain.com:1234")
if err != nil {
    log.Fatalf("Error making Importer: %v", err)
}
ch := make(chan myType)
err = imp.Import("sendmyType", ch, netchan.Receive)
if err != nil {
    log.Fatalf("Receive Error: %v", err)
}

链接

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

results matching ""

    No results matching ""