Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Sugerencia
Socket.IO ahora se admite de forma nativa en Azure. Escalar horizontalmente una aplicación de Socket.IO para controlar miles de conexiones suele ser frustrante. Ahora que Azure admite de forma nativa Socket.IO, puede permitir que Azure controle la escalabilidad y la disponibilidad. Obtenga más información sobre cómo puede obtener cualquier aplicación de Socket.IO que se ejecute en Azure con algunas líneas de código.
Importante
Cloud Services (clásico) ahora está en desuso para todos los clientes a partir del 1 de septiembre de 2024. Microsoft detendrá y cerrará todas las implementaciones en curso y los datos se perderán de forma permanente a partir de octubre de 2024. Las nuevas implementaciones deben usar el nuevo modelo de implementación basado en Azure Resource Manager Azure Cloud Services (soporte extendido).
Socket.IO proporciona comunicación en tiempo real entre el servidor node.js y los clientes. Este tutorial le guía en el hospedaje de una aplicación de chat basada en socket.IO en Azure. Para obtener más información sobre Socket.IO, consulte socket.io.
La siguiente captura de pantalla muestra la aplicación completada:
![Una ventana del explorador que muestra el servicio hospedado en Azure][completed-app]
Prerrequisitos
Asegúrese de que los siguientes productos y versiones están instalados para completar correctamente el ejemplo de este artículo:
- Instalación de Visual Studio
- Instalar Node.js
- Instalación de la versión 2.7.10 de Python
Creación de un proyecto de servicio en la nube
Los siguientes pasos le ayudarán a crear el proyecto de servicio en la nube que hospeda la aplicación de Socket.IO.
En el menú Inicio o la pantalla Inicio, busque Windows PowerShell. Por último, haga clic con el botón derecho en Windows PowerShell y seleccione Ejecutar como administrador.
Cree un directorio llamado c:\node.
PS C:\> md node
Cambie los directorios al directorio c:\node
PS C:\> cd node
Escriba los siguientes comandos para crear una solución nueva llamada
chatapp
y un rol de trabajo con el nombreWorkerRole1
:PS C:\node> New-AzureServiceProject chatapp PS C:\Node> Add-AzureNodeWorkerRole
Puede ver la siguiente respuesta:
Descarga del ejemplo de chat
Para este proyecto, usamos el ejemplo de chat del [repositorio de Socket.IO GitHub]. Realice los siguientes pasos para descargar el ejemplo y agréguelo al proyecto que creó anteriormente.
Cree una copia local del repositorio mediante el botón Clonar . También puede usar el botón ZIP para descargar el proyecto.
Navegue por la estructura de directorios del repositorio local hasta que llegue al directorio examples\chat . Copie el contenido de este directorio en el directorio C:\ndirectorio ode\chatapp\WorkerRole1 creado anteriormente.
Los elementos resaltados en la captura de pantalla anterior son los archivos copiados del directorio examples\chat .
En el directorio C:\node\chatapp\WorkerRole1 , elimine el archivo server.js y, a continuación, cambie el nombre del archivo app.js a server.js. Este paso quita el archivo deserver.js predeterminado creado anteriormente por el cmdlet Add-AzureNodeWorkerRole y lo reemplaza por el archivo de aplicación del ejemplo de chat.
Modificar el archivo server.js e instalar los módulos
Antes de probar la aplicación en el emulador de Azure, se deben realizar algunas modificaciones menores. Realice los siguientes pasos en el archivo server.js:
Abra el archivo server.js en Visual Studio o en cualquier editor de texto.
Busque la sección Dependencias del módulo al principio de server.js y cambie la línea que contiene sio = require('.. //.. lib//socket.io') a sio = require('socket.io') como se indica a continuación:
var express = require('express') , stylus = require('stylus') , nib = require('nib') //, sio = require('..//..//lib//socket.io'); //Original , sio = require('socket.io'); //Updated var port = process.env.PORT || 3000; //Updated
Para asegurarse de que la aplicación escucha en el puerto correcto, abra server.js en el Bloc de notas o en el editor favorito y, a continuación, cambie la siguiente línea reemplazando 3000 por process.env.port de la siguiente manera:
//app.listen(3000, function () { //Original app.listen(process.env.port, function () { //Updated var addr = app.address(); console.log(' app listening on http://' + addr.address + ':' + addr.port); });
Después de guardar los cambios en server.js, siga estos pasos para instalar los módulos necesarios y, a continuación, pruebe la aplicación en el emulador de Azure:
En Azure PowerShell, cambie los directorios al directorio C:\ndirectorio ode\chatapp\WorkerRole1 y use el siguiente comando para instalar los módulos requeridos por esta aplicación:
PS C:\node\chatapp\WorkerRole1> npm install
Este comando instala los módulos enumerados en el archivo package.json. Después de que el comando se completa, debería ver un resultado similar al siguiente recorte de pantalla:
Debido a que este ejemplo era originalmente parte del repositorio de Socket.IO GitHub y hacía referencia directa a la biblioteca de Socket.IO mediante la ruta relativa, no se hacía referencia al Socket.IO en el archivo package.json, por lo que debemos instalarlo ejecutando el siguiente comando:
PS C:\node\chatapp\WorkerRole1> npm install socket.io --save
Prueba e implementación
Inicie el emulador y ejecute el siguiente comando:
PS C:\node\chatapp\WorkerRole1> Start-AzureEmulator -Launch
Nota:
Si tiene algún problema con el emulador de inicio, por ejemplo; Start-AzureEmulator : Error inesperado. Detalles: Se ha encontrado un error inesperado. No se puede usar el objeto de comunicación, System.ServiceModel.Channels.ServiceChannel, para la comunicación porque está en el estado de fallo.
Vuelva a instalar AzureAuthoringTools versión 2.7.1 y AzureComputeEmulator versión 2.7. Asegúrese de que la versión coincida.
Abra un explorador y vaya a
http://127.0.0.1
.Cuando se abra la ventana del explorador, escriba un alias y luego presione Entrar. Este paso le permite publicar mensajes como un alias específico. Para probar la funcionalidad multiusuario, abra ventanas del explorador adicionales con la misma dirección URL y escriba diferentes alias.
Después de probar la aplicación, detenga el emulador ejecutando el siguiente comando:
PS C:\node\chatapp\WorkerRole1> Stop-AzureEmulator
Para implementar la aplicación en Azure, use el cmdlet Publish-AzureServiceProject . Por ejemplo:
PS C:\node\chatapp\WorkerRole1> Publish-AzureServiceProject -ServiceName mychatapp -Location "East US" -Launch
Importante
Asegúrese de usar un nombre único, de lo contrario, se producirá un error en el proceso de publicación. Una vez finalizada la implementación, se abrirá una ventana del explorador y navegará hasta el servicio implementado.
Si recibe un error que afirma que el nombre de suscripción proporcionado no existe en el perfil de publicación importado, debe descargar e importar el perfil de publicación para su suscripción antes de la implementación en Azure. Consulte la sección Implementación de la aplicación en Azure de Compilación e implementación de una aplicación de Node.js en un servicio en la nube de Azure
![Una ventana del explorador que muestra el servicio hospedado en Azure][completed-app]
Nota:
Si recibe un error que afirma que el nombre de suscripción proporcionado no existe en el perfil de publicación importado, debe descargar e importar el perfil de publicación para su suscripción antes de la implementación en Azure. Consulte la sección Implementación de la aplicación en Azure de Compilación e implementación de una aplicación de Node.js en un servicio en la nube de Azure
Su aplicación se está ejecutando ahora en Azure y puede retransmitir los mensajes de chat entre los diferentes clientes que usan Socket.IO.
Nota:
Para fines de simplicidad, este ejemplo se limita a un chat entre los usuarios que están conectados en la misma instancia. Esto significa que si el servicio en la nube crea dos instancias de rol de trabajo, los usuarios solo podrán conversar con otros que estén conectados en la misma instancia de rol de trabajo. Para escalar la aplicación a fin de que funcione con varias instancias de rol, puede usar una tecnología como Service Bus para compartir el estado de almacén de Socket.IO en todas las instancias. Para ver ejemplos, consulte los ejemplos de uso de colas y temas de Service Bus en el repositorio de GitHub del SDK de Azure para Node.js.
Pasos siguientes
En este tutorial aprendió a crear una aplicación de chat básica hospedada en un Servicio en la nube de Azure. Para obtener información sobre cómo hospedar esta aplicación en un sitio web de Azure, consulte Creación de una aplicación de chat de Node.js con Socket.IO en un sitio web de Azure.
Para obtener más información, consulte también el Centro para desarrolladores deNode.js.