Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Azure上的多个实例之间维护Node.js会话_Node.js_Azure_Queue - Fatal编程技术网

在Azure上的多个实例之间维护Node.js会话

在Azure上的多个实例之间维护Node.js会话,node.js,azure,queue,Node.js,Azure,Queue,我有3个Node.js worker角色实例在Windows Azure上运行。我正在尝试维护所有实例之间的会话 Azure队列似乎是推荐的方法,但如何确保所有实例都接收会话,因为一旦单个实例将会话解列,队列就会删除会话 Azure table不太适合我的应用程序,因为会话太频繁,不需要存储超过10秒。队列不是会话状态的好机制;它是用来传递信息的。一旦一个实例读取了队列消息,当特定角色实例处理该消息时,它就不再可见。另外:处理完邮件后,您会如何处理它?更新它,然后使其再次可见?问题是您无法选择要

我有3个Node.js worker角色实例在Windows Azure上运行。我正在尝试维护所有实例之间的会话

Azure队列似乎是推荐的方法,但如何确保所有实例都接收会话,因为一旦单个实例将会话解列,队列就会删除会话


Azure table不太适合我的应用程序,因为会话太频繁,不需要存储超过10秒。

队列不是会话状态的好机制;它是用来传递信息的。一旦一个实例读取了队列消息,当特定角色实例处理该消息时,它就不再可见。另外:处理完邮件后,您会如何处理它?更新它,然后使其再次可见?问题是您无法选择要阅读的“会话”。这几乎是一个FIFO队列(未正确处理的消息可能会重新出现)。它不像一个键/值存储

要创建可访问的会话存储库,您可以利用Azure的角色内(或专用角色)缓存,它是跨角色实例的分布式缓存。您也可以使用表存储—只是简单的键/值类型的读/写。node.js Azure SDK中包含表存储

也就是说:我们走缓存路线吧。由于会话是短期的,而且(我猜)不会占用太多内存,因此可以从角色内缓存开始(缓存与节点代码共享工作角色RAM,占用一定百分比的内存)。缓存也与memcache兼容,很容易从节点应用程序访问

如果您看一下,我将显示访问缓存的位置。您需要以这种方式设置缓存,但也可以通过添加名为
memcache\u default
的内部端点来设置memcache服务器网关。然后,将memcache客户端类指向内部端点。完成了

完整说明(以及有关memcache gateway与client shim的详细信息,您在设置专用缓存角色时会用到这些信息)如下所示。您将看到,如果使用专用缓存,说明会略有不同,因为建议在节点应用程序的工作者角色中使用客户端垫片