0

我必须以我的 azure worker 角色启动两个 socket.io 进程。我按照此链接中的步骤 操作以下是我的 ServiceDefinition.csdef

<WorkerRole name="WorkerRole1">
<Startup>
  <Task commandLine="setup_worker.cmd &gt; log.txt" executionContext="elevated">
    <Environment>
      <Variable name="EMULATED" value="false"/>           

      <Variable name="RUNTIMEID" value="node" />
      <Variable name="RUNTIMEURL" value="http://az413943.vo.msecnd.net/node/0.6.20.exe" />
    </Environment>
  </Task>      
</Startup>
<Endpoints>
  <InputEndpoint name="HttpIn" protocol="tcp" port="80" />
</Endpoints>
<Runtime>
  <Environment>
    <Variable name="PORT">
      <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/Endpoints/Endpoint[@name='HttpIn']/@port" />
    </Variable>
    <Variable name="EMULATED">
      <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
    </Variable>
  </Environment>
  <EntryPoint>
    <ProgramEntryPoint commandLine="node.cmd .\server.js" setReadyOnProcessStart="false" />
  </EntryPoint>
</Runtime>
<Imports>
  <Import moduleName="RemoteAccess" />
  <Import moduleName="RemoteForwarder" />
  <Import moduleName="Diagnostics" />
</Imports>   
<LocalResources>
  <LocalStorage name="WorkerLocalStorage" cleanOnRoleRecycle="false" sizeInMB="1024" />
</LocalResources>

在此我在运行时启动 server.js,但我也想启动另一个 socket.io 脚本。原因是我不想为小型应用程序使用另一个工作者角色。只是为了节省成本。我尝试将其作为启动任务启动,但当我在模拟器中启动云服务时,工作角色正在挂起/循环,输出对话框中没有错误信息。所以我猜测 socket.io 脚本只能在运行时部分启动。有什么方法可以让我的 socket.io 脚本都以一个工作角色启动?

4

1 回答 1

1

您可以通过多种方式执行此操作:

  1. 通过启动任务启动进程
  2. 从角色入口点启动流程。

对于 #1,如果您看到角色挂起/循环,那是因为您的启动任务中存在错误,而不是因为 Azure 阻止您运行 socket.io 脚本。有关如何解决此问题,特别是故障排除方案 2(http://blogs.msdn.com/b/kwill/archive/2013/08/26/troubleshooting-scenario-2-role-recycling-after-running-fine-for-2-weeks.aspx)。此外,请确保将启动任务设置为后台,以便主机引导程序在继续角色启动过程之前不会等待进程退出。

对于#2,您必须修改 node.cmd 以生成两个进程,或者切换到使用不同的角色入口点并让该角色入口点与其他脚本一起启动 node.cmd。

于 2013-09-23T14:54:03.887 回答