【问题标题】:How to start node js script in a windows azure cloud project?如何在 Windows azure 云项目中启动节点 js 脚本?
【发布时间】:2013-03-14 11:38:23
【问题描述】:

我对 node js 和 socket.io 非常陌生。我正在将 socket.io 用于 Windows azure 项目。我创建了一个启动 socket.io 服务器的 App.js,但我不知道如何以编程方式运行该脚本。我可以从命令提示符(例如“node app.js”)运行该脚本,并且 socket.io 服务器启动并且客户端应用程序能够与 socket.io 服务器很好地交互。

我也可以去127.0.0.1/App.js,socket.io服务器启动。

但我希望脚本在我在 VS 中启动项目后立即自动运行。知道我该怎么做吗?

编辑:

原来 iisnode 可以处理所有事情,我只需要在 web.config 中放置一个重写代码。从这里http://www.windowsazure.com/en-us/develop/nodejs/tutorials/getting-started/ 的示例 azure node js 应用程序中,我得到了这个重写代码

<rewrite>
  <rules>
    <clear />
    <rule name="app" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
      <match url="iisnode.+" negate="true" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
      <action type="Rewrite" url="App.js" />
    </rule>
  </rules>
</rewrite>

它会自动启动 App.js,但会将我的所有视图重定向到 App.js 脚本。我想这与我上面写的重写代码有关。我应该进行哪些更改才能让 App.js 在启动时运行并且仍然能够访问我的其他 html 视图?

谢谢

【问题讨论】:

    标签: node.js azure socket.io iisnode


    【解决方案1】:

    嗯,根据您使用 socket.io 的原因,工作者角色可能更适合。 WebRole 目前不支持 WebSockets,因此如果您使用 Web 角色,则需要将传输设置为仅 xhr-polling。

    如果您只是对网络角色感兴趣,也可以考虑使用 azure 网站来托管您的应用。您可以查看我的示例存储库,其中包含一个可以直接部署到 azure 网站的 socket.io 聊天应用程序:

    http://github.com/markcowl/WebChatDefault-1

    【讨论】:

    • 非常感谢您的回答,但我只能赞成它,因为我仍然无法正确启动我的节点 js 脚本。
    • 顺便说一句,你确定 WebRole 不支持 Web 套接字吗?因为我的印象是 IIS 8 支持 Web 套接字?
    • 非 .Net 角色的 WebSockets 在技术上是可行的,但不受支持。如果你只使用 node.js,那么现在使用 worker 角色会好得多
    【解决方案2】:

    本教程是在 Azure http://www.windowsazure.com/en-us/develop/nodejs/tutorials/getting-started/ 上构建和部署 nodeJS 应用程序的分步指南

    【讨论】:

    • 是的,我确实经历过,但整个过程是使用 Windows azure power shell 完成的,我在 VS 12 上工作,我希望有一些代码可以用来启动 App.js启动脚本?
    【解决方案3】:

    您需要在运行 node.js 的服务定义中设置一个入口点,然后当您在模拟器中运行项目时,它会自动启动,类似于:

    请注意,您不必将 vs 用于节点应用程序,您可以使用 Windows Azure PowerShell 设置节点辅助角色来托管您的应用程序,请参阅:

    http://www.windowsazure.com/en-us/develop/nodejs/tutorials/app-using-socketio/

    有关使用 PowerShell 设置 socket.io 应用程序的教程

    【讨论】:

    • 我实际上是在 web 角色中运行我的节点 js 脚本和 socket.io 实现。应该只在工人角色中完成吗?
    • 再一次,worker 角色对于当前非.Net 角色的 websocket 来说是更好的选择。这应该在不久的将来改变。 Windows Azure PowerShell 确实是您想要使用的,它对部署非 .Net 角色有更好的支持
    【解决方案4】:

    你有没有改变你的处理程序“iisnode”?

    <!-- indicates that the server.js file is a node.js application 
    to be handled by the iisnode module -->
    <handlers>
      <add name="iisnode" path="App.js" verb="*" modules="iisnode" />
    </handlers>
    <rewrite>
      <rules>
        <clear />
        <rule name="app" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
            <match url="iisnode.+" negate="true" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
            <action type="Rewrite" url="App.js" />
        </rule>
      </rules>
    </rewrite>
    

    并在 .csdef 中编辑 WebRole 的任务:

    <Task commandLine="node.cmd ..\App.js" executionContext="elevated" />
    

    【讨论】:

    • 当我把任务放在 .csdef 中时,角色没有启动,他们挂起,这意味着命令无法执行或什么的。知道可能是什么问题吗?
    • 您是否创建了 AzureNodeWebRole 或 AzureWebRole ?阅读本文以创建基础 nodeJS azure 项目:windowsazure.com/en-us/develop/nodejs/tutorials/getting-started
    • VS 2012 中的 Azure Web 角色。我的节点 js 文件只是主要用 c# 编写的大型 Web 角色的一小部分。我只需要把这一个节点的js文件实现socket.io。所以我认为我不应该选择 azure node web 角色,是吗?
    • NodeWebRole 为您安装节点可执行文件,启动节点任务,......并且您的网站可以启动节点程序
    猜你喜欢
    • 2021-12-21
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 2017-04-27
    • 1970-01-01
    • 2022-07-06
    • 2019-08-29
    相关资源
    最近更新 更多