2013-09-23 2 views
0

Мне нужно запустить два процесса socket.io в моей рабочей роли в лазури. Я последовал за шагами в этом link Ниже мой ServiceDefinition.csdefКак запустить два процесса socket.io в одной рабочей роли?

<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 в одной рабочей роли?

ответ

1

Вы можете сделать это несколькими способами:

  1. Запуск процесса с помощью задачи запуска
  2. Запустить процесс с точки входа роль.

Для # 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, чтобы вызвать два процесса, либо переключиться на использование другой точки входа роли и включить эту точку входа в role.cmd вместе со своим другим скриптом.

+0

Большое спасибо! Ваш сценарий 2 статьи был очень полезен! – Bitsian

+0

Эй! Возникает другая проблема, связанная с запуском задач. http://stackoverflow.com/questions/19007370/how-to-connect-to-a-socket-io-script-started-from-the-start-up-task-of-a-worker, можете ли вы взять посмотри на это. благодаря – Bitsian