Webdev-Labs - Aplicación Mini Chat - C - ZIP
Webdev-Labs - Aplicación Mini Chat - C - ZIP
Webdev-Labs - Aplicación Mini Chat - C - ZIP
Créditos y felicitaciones:
Actualizaciones
Si no puede hacer funcionar su servidor de chat local, use el servidor de chat del
curso, al que se puede acceder aquí: wss://chat-server-cs396.herokuapp.com
Lecturas de fondo
• WebSockets para diversión y ganancias (una descripción general agradable y
concisa)
Hasta ahora, hemos estado usando el protocolo HTTP para enviar mensajes entre el cliente
de un usuario en el servidor. Con HTTP, los clientes deben iniciar conexiones individuales con
el servidor para solicitar y recibir datos.
Sin embargo, hay ejemplos en los que puede ser útil que el servidor envíe datos al cliente sin
que el cliente lo solicite explícitamente. Los WebSockets son útiles para estos casos, ya que
cada cliente establece una conexión persistente con el servidor a través de la cual el
servidor puede enviar mensajes.
Hoy, creará una aplicación de mensajería con WebSockets. Esto requiere dos componentes:
• Un cliente que establece una conexión con el servidor y envía mensajes al servidor
cada vez que un usuario chatea.
Tenga en cuenta que el servidor y el cliente no tienen que estar en la misma máquina (y,
además, el cliente ni siquiera tiene que estar alojado en la nube).
1. Configura tus archivos y servidor local
LAB09.ZIP
1. Organizar archivos
1. Descarga el archivo y descomprímelo. Debería ver los siguientes archivos: lab09.zip
lab09
├── client
│ ├── client.js
│ ├── index.css
│ └── index.html
└── server
├── .env
├── Procfile
├── app.py
└── requirements.txt
3. Ejecute su servidor
Tenga en cuenta que esto NO ES un servidor Flask. Ante esto:
1. Ejecutará el servidor como un archivo python normal (con su entorno virtual activado):
python app.py
2. Cada vez que realice un cambio, tendrá que reiniciar el servidor. app.py
• Este servidor no usa flask. Más bien, está usando la biblioteca de terceros para
escuchar las solicitudes de websocket. websockets
Su trabajo consiste en editar el código para controlar los tres tipos diferentes de mensajes
JSON que se muestran a continuación. Estos formatos de datos son obligatorios:
simplemente los inventamos como formas razonables de enviar información de inicio de
sesión, desconexión y chat. Puedes configurar estos mensajes como quieras, pero aquí solo
tomamos algunas decisiones sobre cómo hacer las cosas: app.py
Manejará cada uno de estos mensajes de acuerdo con las especificaciones que se describen
a continuación:
1. Iniciar sesión
Si es "login", agregue el socket y el usuario registrado al
diccionario: data.get('type') logged_in_users
logged_in_users[websocket] = data.get('username')
{
"type": "login",
"user_joined": data.get('username'),
"active_users": list(logged_in_users.values())
}
Puede probar esto abriendo en su navegador web, haciendo clic en los botones "Conectar" y
"Establecer nombre" (y también proporcionando un nombre de usuario) y viendo si obtiene la
salida JSON correcta en la consola del navegador. lab09/client/index.html
2. Desconectar
Si es "desconectar", elimine al usuario del diccionario logged_in_users. data.type
del logged_in_users[websocket]
{
"type": "disconnect",
"user_left": data.get('username'),
"active_users": list(logged_in_users.values())
}
Puede probar esto abriendo en una segunda pestaña del navegador y haciendo clic en los
botones "Conectar" y "Establecer nombre" (y también proporcionando un nombre de
usuario). A continuación, cierra la pestaña del navegador que acabas de abrir. Ahora vuelve a
la primera pestaña del navegador y mira la consola. Debería ver un mensaje en la consola
que indica que un usuario se conectó y luego se desconectó del servidor de
chat. lab09/client/index.html
3. Chat
Si es "chat", simplemente envíe el objeto a cada cliente (no es necesario procesamiento).
Puede probar esto enviando un mensaje de chat en el cliente y, a continuación, ver si obtiene
la salida JSON correcta en la consola del navegador. data.get('type') data
Ahora ábrelo en VS Code y échale un vistazo. Gran parte de este cliente (simple) ya se ha
implementado para usted, incluidos: client.js
1. Código para configurar los oyentes de eventos web socket + socket (cuando el usuario
hace clic en el botón "Conectar").
2. Código para enviar mensajes al servidor (responder a eventos de la interfaz de usuario).
3. Código para escuchar y responder a (algunos) eventos DOM.
4. Código para manejar cambios en la interfaz de usuario (es decir, mostrar y ocultar
elementos DOM).
5. Un código auxiliar de controlador de eventos (función) llamado que
implementará. handleServerMessage
2. Chat
Si data.type es "chat", añada el mensaje de chat al div (panel principal) con el nombre y el
mensaje del remitente. Utilice las clases "left" y "right" para diferenciar al usuario actual de
todos los demás usuarios. #chat
Si su cliente y servidor funcionan, debería poder abrir dos pestañas separadas del
navegador, iniciar sesión en el mismo servidor en cada una y enviar mensajes entre ellas (vea
el video a continuación). index.html
4. Accesibilidad
Es importante pensar en cómo los usuarios ciegos o con baja visión podrían interactuar con
una aplicación de chat. Específicamente:
1. Los nuevos mensajes de chat se insertan en el DOM cada vez que otro usuario envía un
mensaje.
2. New users are coming and going all of the time.
Given this, please ensure that all of the regions that are updated when websocket messages
are received use the and attributes. Read more on live regions here. aria-live role
Both Apple and Windows machines have a pre-installed screenreader. Use VoiceOver on Mac
or Narrator on Windows to test the behavior described above (see instructions below).
play_arrow
You should sign up for ngrok using your Northwestern email and download/extract the
version for your preferred OS.
Run ; if the command fails, find the location where the ngrok executable was downloaded to
and add the folder to your system PATH. Then, run with the token listed in your ngrok
dashboard. ngrok help ngrok authtoken <token>
With your server running in another terminal window, type to open a tunnel to your server.
You should now be able to add the forwarding url (minus the http://) to the list of servers on
your client and use it as a separate chat room. ngrok http 8081
What to Turn In
When you’re done, zip the completed folder and submit it to Canvas.