如何在单个辅助角色中启动两个socket.io进程?

时间:2013-09-23 12:08:28

标签: c# node.js azure socket.io iisnode

我必须在我的azure worker角色中启动两个socket.io进程。我按照link中的步骤进行操作  下面是我的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脚本。原因是我不想为一个小应用程序使用另一个worker角色。只是为了节省成本。我尝试将其作为启动任务启动,但是当我在模拟器中启动云服务且输出对话框中没有错误信息时,工作者角色挂起/循环。所以我猜测socket.io脚本只能在运行时部分启动。有什么方法可以在单个辅助角色中启动我的socket.io脚本吗?

1 个答案:

答案 0 :(得分:1)

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

  1. 通过启动任务启动流程
  2. 从角色入口点开始此过程。
  3. 对于#1,如果您看到角色挂起/循环,那么这是因为启动任务中的错误,而不是因为Azure阻止您运行socket.io脚本。有关如何解决此问题的方法,请参阅http://blogs.msdn.com/b/kwill/archive/2013/08/09/windows-azure-paas-compute-diagnostics-data.aspx,尤其是疑难解答方案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。