我必须在我的azure worker角色中启动两个socket.io进程。我按照link中的步骤进行操作 下面是我的ServiceDefinition.csdef
<WorkerRole name="WorkerRole1">
<Startup>
<Task commandLine="setup_worker.cmd > 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脚本吗?
答案 0 :(得分:1)
您可以通过多种方式执行此操作:
对于#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。