使用Node-Js作为消息传递层

时间:2016-11-05 22:42:42

标签: node.js mpi tcp-ip

  (client) node-js http request  <-----------> node-js http listen (server)
             ^                   100/1000 MBit/s     ^
             |                       LAN             |
             v                                       v
     a file in ramdrive                         a file in ramdrive 
            ^                                        ^
            |                                        |  
            v                                        v
        C# program requesting                     C# or Java program      
           compute on data                           computing

更容易
(client)C# tcp ip <--------------------------------->C#/Java tcp ip (server)
           socket      100/1000 Mbit/s LAN                         socket

在错误处理方面(例如半开连接,确认数据包管理和选择正确的窗口/缓冲区大小)和可扩展性(对于使用树状连接的10-100台服务器)?

如果node-js层仅用于I / O,那么对于基本交换机/路由器上的集群(例如,不是infiniband),它会比MPI更好吗?

目前,我正在尝试使用tcp-ip选项并且已经有太多例外情况要处理,而且还没有完成。由于桌面操作系统存在最大连接,因此阵列的序列化还需要检查服务器和客户端的字节顺序以及在发送/计算数据之前进行更多的平衡。在任何地方它都说异步是最好的。我刚开始使用1个连接版本的1个线程。线程版本还具有持久的本地数据来保存计算设备信息和编译的内核(对于opencl)。

如果我理解正确,mpi和node-js都需要在服务器和客户端安装运行时,但tcp-ip不需要这样的东西。但这不会平衡其他困难吗?

在node-js和C#之间添加ramdrive进入我的脑海,因为从node-js(和C#)访问文件看起来很容易,而且比tcp连接要少得多。当它只是传递数据时,Http监听在node-js中几乎是一线的。

1 个答案:

答案 0 :(得分:2)

在不知道你正在做什么的具体情况下,很难推荐一个特定的解决方案......但我怀疑你正在重新发明一个解决方案。

结帐Redis。大多数语言都有客户端库,它可以在网络上运行,处理各种数据类型,甚至支持pub / sub。它的构建非常高效...... Redis的开发人员为许多应用程序做了很多正确的权衡。