序列化nodejs / socket.io缩放应用程序中的资源

时间:2016-07-29 15:51:16

标签: node.js socket.io

目前我的nodejs / socket.io服务器在一个线程中运行,但有一些方法可以使它在未来可以采用的可扩展性更高(例如here)。 但是这会使服务器的所有实例在不同的集群进程上运行,这样资源就不再被序列化了,并且引发了并发问题。 有一种方法可以基于密钥在nodejs / socket.io服务器上的不同进程中序列化某些代码段吗? 例如:

#define TAB_WIDGET_ROW(t)     {t##_seq, t##_len, t##_rep}

这是一个例子,但如果我能用promises完成同样的任务(我不知道如何),我将不胜感激。

1 个答案:

答案 0 :(得分:1)

在处理某些内容时,没有完全通用的跨进程互斥锁可以神奇地挂起所有其他nodejs进程。

但是,有许多不同类型的工具可用于解决特定问题。

#1工具是使用适当的设计来最小化或消除流程之间的竞争条件。如何准确地执行此操作特定于您要解决的问题,因此如果您描述特定问题,我们可以提供更多有用的信息。一种常见的方法是使用公共数据存储并设计代码以在数据库中使用原子操作。然后,它使用数据库功能本身作为您的控制机制(多用户数据库通常设计用于处理非常好的事情)。

除此之外,您还可以使用数据库锁,文件锁或其他跨进程通信机制。

以下是使用redis的说明:implement mutex in node.js

这是一个提供nodejs跨进程互斥体的模块(实际上在封面下使用文件锁定):https://github.com/Perennials/mutex-node

另一个模块:https://www.npmjs.com/package/rwlock

任何这些锁定机制当然都可以包含在promise接口中。