【问题标题】:Scale-out Node.js with Socket.io on Windows Azure在 Windows Azure 上使用 Socket.io 横向扩展 Node.js
【发布时间】:2014-02-21 11:55:47
【问题描述】:

我关注了"Build a Node.js Chat Application..." 的帖子,该帖子逐步展示了如何使用 Socket.io 部署 Node.js 应用程序以提供实时聊天 web 应用程序。

唯一缺少的是展示如何扩展此应用程序,因为我发现在 Windows Azure 上扩展此类应用程序并不是那么简单,因为 Azure LB 仅支持循环策略。

我确实找到了socket.io-servicebus,它为 pub/sub 商店的需求提供了一些解决方案。 但这还不够,因为 Socket.io 在握手阶段有一个已知错误#952,这意味着握手阶段在没有粘性会话的情况下无法工作。

有什么想法吗?

【问题讨论】:

    标签: node.js azure socket.io azure-web-roles


    【解决方案1】:

    免责声明:我没有尝试过。

    回到云服务支持节点的第一个版本。为了避免 iisnode,我经常以工作角色而不是 Web 角色运行节点。这在当时是必要的,因为 Windows Server 2008 R2 根本不支持 websockets。因此,为了将 socket.io 与 node 一起使用,这就是方法。现在 Windows Server 2012 可用,我们不再这样做了。

    鉴于此,osfamily 2 (SessionAffinity) 和 osfamily 3 (SessionAffinity4) 有工具可以在工作角色(明确地不是 Web 角色)中启用粘性会话。这可以满足您的需求,但代价是部署和本地测试更加复杂(如果您使用 emulator )。

    我确实有运行 SignalR 的客户端和在 Windows Azure 中运行的服务总线背板。所以我可以验证这组选项。但我还没有运行 SessionAffinity 插件。

    另外值得注意的是,Windows Azure 网站默认使用 ARR 来引入会话亲和性。仅当您不受某种原因束缚于云服务时。 (link)

    【讨论】:

    • 谢谢,似乎所有这些解决方案只是在 Azure LB 和 node.js 服务器之间添加另一个 LB 服务器(带有粘性会话)。
    • 绝对不理想。值得注意的是,这些天有多少投资进入网站。与云服务相比,向网站添加的功能要多得多。除非需要在服务器上安装组件,否则我一直在通过云服务向网站添加新客户端。
    • 我通过 Websockets 移至 primus.io,它似乎工作正常。因为它没有 socket.io 竞争条件错误
    猜你喜欢
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2014-11-25
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多