猿问

用于 Web 应用程序的 node.js golang 复合架构

我目前正在构建一个将使用 node.js 进行基本路由的 Web 应用程序。应用程序的某些部分是处理器密集型的,我想对这些部分使用 golang。但是,我不确定在两种语言之间安装和通信的最佳方式。我使用 Amazon Elastic Beanstalk 进行初始测试,因此任何细节都可以针对该平台。

本质上归结为以下两个问题:

1) 如何在 Amazon EC2 上同时安装 node.js 和 golang docker 镜像?亚马逊有其中之一的指南,但不是两者都有。

2) 将处理器密集型任务从 node.js 卸载到 golang 代码库的最佳方法是什么(我可以对 RPC 进行成像,或者只是在某个本地主机端口上运行 golang,但我对这种类型的东西还不熟悉)?golang 任务可能是诸如严重的数字运算或复杂的图形搜索之类的事情。

感谢您的任何指导。


慕雪6442864
浏览 244回答 1
1回答

犯罪嫌疑人X

Go 部署起来很简单。只需在 linux 机器上构建它(或使用 gox)并部署二进制文件。(你不需要在服务器上安装 go 来运行 go 程序)Go 和 Node.js 之间的通信有很多选择。以下是一些:如果您正在做的工作需要很长时间,让用户等待响应可能是不合适的。对于后台任务,您可以使用队列(例如 Redis 的rpoplpush或真正的队列,例如 Kafka 或 RabbitMQ,或者因为您使用的是 Amazon:SQS)。将您的作业作为 JSON 对象推送到队列上,然后编写一个 Go 程序,从队列中提取数据,进行处理,然后将最终结果写入某处。Go 有一个jsonrpc 库。您可以通过 TCP 进行通信,在 Node 中序列化请求,在 Go 中读取它,然后在 Node 中反序列化响应。这是 jsonrpc 1.0 协议,对于 TCP,您所要做的就是添加一些消息帧(用长度前缀您的 json 字符串)或者只是换行分隔每个请求/响应。用 Go 编写一个标准的 HTTP 服务,然后从 NodeJS 进行 HTTP 调用。(放置/发布/获取)
随时随地看视频慕课网APP

相关分类

Go
我要回答