nodejs | worker_thread |保持工人内部的TCP连接?

时间:2019-07-04 10:16:13

标签: node.js worker-thread

使用节点12的worker_threads是否适合在工作进程中建立远程连接并使这些连接保持活动状态?

我并不是说sharingmasterworkers之间的套接字,就像clusterfork一样。

想法是在工作人员中已经建立安全连接池,以在需要时使用。

假设我有10名工人。创建工作程序后,将创建到服务器X,Y和Z的一些预先建立的“ TLS”连接(流),并将该工作程序标记为“就绪”

每次使用工人处理“繁重的”任务(mapReduce等),并且在此过程中如果需要向服务器X,Y或Z发布数据或从服务器X,Y或Z获取数据, 我使用已经从池中建立的适当的“ TLS”连接。

任务完成后,结果将返回给主服务器,而工作程序仅执行新/下一个任务。

1)您看到这样做有副作用吗?

2)最好在“主线程”(主线程)上具有“ TLS”连接池。如果在任务执行期间在工作人员中需要“远程”数据,请使用“ postMessage”方法与“主”进行通信(反之亦然)。

谢谢

1 个答案:

答案 0 :(得分:0)

工作线程不适用于远程连接。但是,您可以使用TLS sockets构建自己的类似系统。在这样的系统中,我绝对会建议保持这些类型的连接处于活动状态。设置这些连接存在很大的延迟,并且将这些连接激活在内存中将占用最少的资源。

请记住,这样的系统有一些缺点:

  1. 您正在使用不同的计算机,并且这些计算机中的每台计算机都有其自己的一组故障条件。
  2. 您正在通过网络进行通信,出于任何可以想象的原因,与远程服务器的连接可能突然中断。
  3. 您在增加物理距离,这将导致latency

所以请记住这一点。

我建议构建这样的系统。真的很难确定,它取决于您的用例,时间和金钱。您提到群集节点正在处理“繁重的任务”,并且据此我认为CPU / GPU密集型任务。因此,像这样的系统可能是一个很好的解决方案,但是,在处理服务器之前使用一个简单的rest API可能就足够了。甚至是数据库同步服务器,它们只需检查数据库中要执行的任务即可。

针对同一问题有很多解决方案,只需考虑最适合您的项目的