node.js - 节点 | worker_thread | 在工作人员中保持活动的 tcp 连接?
问题描述
使用节点 12 的worker_threads,是否适合在工作人员中建立远程连接并保持这些连接处于活动状态?
我并不是说我们可以用sharing
nodemaster
和.workers
cluster
fork
这个想法是在工作人员内部建立安全连接池,以便在需要时使用。
假设我有 10 名工人。创建工作人员时,会创建一些预先建立的“TLS”连接(流)到服务器 X、Y 和 Z,并且工作人员被标记为“就绪”
每次我使用工作人员处理“繁重”任务(mapReduce 等)时,如果我需要在此过程中向服务器 X、Y 或 Z 发布数据或从服务器 X、Y 或 Z 获取数据,我使用适当的“TLS”连接已经从池中建立。
任务完成后,结果将返回给主服务器,工作人员只需执行新的/下一个任务。
1) 你看到这样做有什么副作用/影响吗?
2)在“主线程”(主线程)上拥有“TLS”连接池会更好。如果在任务期间工作人员内部需要“远程”数据,请使用“postMessage”方法与“master”通信(反之亦然)。
谢谢
解决方案
工作线程不适用于远程连接。但是,您可以构建自己的系统,使用TLS 套接字可以类似地工作。在这种系统的情况下,我肯定会建议保持这些类型的连接处于活动状态。建立这些连接有很大的延迟,并且在内存中激活这些连接将使用最少的资源。
请记住,这样的系统有一些缺点:
- 您正在使用不同的机器,并且这些机器中的每一个都可以有自己的一组故障条件。
- 您正在通过网络进行通信,与远程服务器的连接可能会突然断开,出于任何可以想象的原因。
- 您正在增加物理距离,这将导致延迟。
因此,请记住这一点。
我会建议建立一个这样的系统。这真的很难确定,它取决于您的用例、时间和金钱。您提到集群节点正在处理“繁重的任务”,因此我认为是 CPU / GPU 密集型任务。所以像这样的系统可能是一个很好的解决方案,但是,在处理服务器前面的一个简单的 rest API 可能就足够了。或者甚至可能是数据库同步服务器,它只是检查数据库中要执行的任务。
同一个问题有很多解决方案,只需要考虑最适合您的项目的解决方案。
推荐阅读
- javascript - 为移动设备调整 Javascript 功能
- c# - 实体框架中 MSSQL 的默认命令超时
- reed-solomon - 使用 Berlekamp-Massey 算法的错误检测能力
- xamarin.android - Xamarin Android - API 27 请求权限
- c# - 使用 Microsoft.Management.Infrastructure (CimSession) 读取注册表值
- c++ - Compiling string and returning it as a vector
- vue.js - How do I retrieve the datas sent back to a SweetAlert2 Ajax call?
- php - 如何从linux终端连接mysql数据库
- mysql - Cast Sum IF mysql
- angular - Angular 嵌套表单父/子组件