Differences

This shows you the differences between two versions of the page.

Link to this comparison view

isi:laboratoare:07 [2024/11/17 22:24]
alexandru.predescu
isi:laboratoare:07 [2024/11/21 11:04] (current)
sorin.ciolofan
Line 270: Line 270:
  
 3. **Chat interactiv** 3. **Chat interactiv**
 +
 +Această aplicație presupune un server Flask care interacționează cu RabbitMQ și expune o interfață web pentru utilizator.
  
 **Implementare:​** Pornind de la codul pentru această aplicație de mesagerie, implementează funcționalitățile necesare, marcate cu TODO-uri in fisierul ''​message_service.py'',​ pentru ca aceasta să funcționeze complet: **Implementare:​** Pornind de la codul pentru această aplicație de mesagerie, implementează funcționalitățile necesare, marcate cu TODO-uri in fisierul ''​message_service.py'',​ pentru ca aceasta să funcționeze complet:
Line 276: Line 278:
   * TODO b) Consumă mesajele care sosesc pe queue-ul tău. Adaugă un `consumer_tag` cu numele queue-ului, astfel încât consumatorul să nu mai asculte la acest queue atunci când utilizatorul se deconectează (logout).   * TODO b) Consumă mesajele care sosesc pe queue-ul tău. Adaugă un `consumer_tag` cu numele queue-ului, astfel încât consumatorul să nu mai asculte la acest queue atunci când utilizatorul se deconectează (logout).
   * TODO c) Implementează trimiterea unui mesaj către un anumit utilizator pentru a putea iniția o conversație privată cu acesta.   * TODO c) Implementează trimiterea unui mesaj către un anumit utilizator pentru a putea iniția o conversație privată cu acesta.
 +
 +<note tip>
 +
 +Folosește instanța locală și rulează scriptul ''​initialize.py''​ din laborator, care configurează 3 utilizatori:​ **stefan**, **alex** și **maria**.
 +
 +**Testare**:​ Pentru a testa aplicația, puteți rula două instanțe ale aplicației pe porturi diferite, pentru a simula doi utilizatori care folosesc aplicația pe dispozitive diferite. În cadrul testării, punctul a) poate fi verificat individual, iar punctele b) și c) vor fi testate împreună.
 +
 +Pentru a rula aplicația, folosește comanda: ''​python app.py''​ sau ''​flask run''​.
 +
 +Aceasta va rula implicit pe portul 5000, iar pentru a vizualiza interfața pusă la dispoziție de aceasta, deschideți [[http://​localhost:​5000|]].
 +
 +Pentru a rula aplicația pe un alt port decât cel implicit, rulați ''​flask run <​nowiki>​--</​nowiki>​port 5001''​.
 +</​note>​
  
 **Testare:​** **Testare:​**
  
   * Testează funcționalitatea pentru a verifica dacă poți comunica cu un alt utilizator (folosind două instanțe locale de aplicație).   * Testează funcționalitatea pentru a verifica dacă poți comunica cu un alt utilizator (folosind două instanțe locale de aplicație).
-  * Schimbă conexiunea la RabbitMQ cu următoarea și testează dacă poți conversa cu alți colegi.+  * Schimbă conexiunea la RabbitMQ cu următoarea și testează dacă poți conversa cu alți colegi:
  
 <​code>​ <​code>​
Line 287: Line 302:
 Parola: întreabă coordonatorul de laborator Parola: întreabă coordonatorul de laborator
 </​code>​ </​code>​
- 
-<note tip> 
-**Testare**:​ Pentru a testa aplicația, puteți rula două instanțe ale aplicației pe porturi diferite, pentru a simula doi utilizatori care folosesc aplicația pe dispozitive diferite. În cadrul testării, punctul a) poate fi verificat individual, iar punctele b) și c) vor fi testate împreună. 
- 
-Pentru a rula aplicația, folosește comanda: ''​python app.py''​ sau ''​flask run''​. 
-Aceasta va rula implicit pe portul 5000, iar pentru a vizualiza interfața pusă la dispoziție de aceasta, deschideți [[http://​localhost:​5000|]]. 
- 
-Pentru a rula aplicația pe un alt port decât cel implicit, rulați ''​flask run --port 5001''​. 
-</​note>​ 
  
 <note important>​ <note important>​
-În cadrul acestui exercițiu, nu vei declara queue-uri sau exchange-uri,​ deoarece acestea sunt deja create. Până să te conectezi la instanța din cloud, folosește instanța locală și rulează scriptul ''​initialize.py''​ din laborator, care configurează 3 utilizatori:​ **stefan**, **alex** și **maria**. +În cadrul acestui exercițiu, nu vei declara queue-uri sau exchange-uri,​ deoarece acestea sunt deja create ​pe instanța din cloud.
-</​note>​+
  
-<note tip>**Important**:​ Când te conectezi la instanța din cloud, utilizatorii vor avea formatul ''​nume_prenume_grupa''​. Dacă nu ești sigur care este utilizatorul pregătit pentru tine, conectează-te la:+**Important**:​ Când te conectezi la instanța din cloud, utilizatorii vor avea formatul ''​nume_prenume_grupa''​. Dacă nu ești sigur care este utilizatorul pregătit pentru tine, conectează-te la:
  
 [[http://​acc-atomicsoftware.swedencentral.cloudapp.azure.com:​15672]] [[http://​acc-atomicsoftware.swedencentral.cloudapp.azure.com:​15672]]
  
 cu utilizatorul si parola de mai sus și caută în tab-ul //Queues and Streams// după numele tău. Queue-ul o să se numească //​chatUser.username//,​ iar tu trebuie să folosești doar //​username//​ pentru a te conecta. În situația în care totuși nu te regăsești,​ poți folosi unul dintre utilizatorii următori: //bob//, //alice//, //stefan//, //​alex//​.</​note>​ cu utilizatorul si parola de mai sus și caută în tab-ul //Queues and Streams// după numele tău. Queue-ul o să se numească //​chatUser.username//,​ iar tu trebuie să folosești doar //​username//​ pentru a te conecta. În situația în care totuși nu te regăsești,​ poți folosi unul dintre utilizatorii următori: //bob//, //alice//, //stefan//, //​alex//​.</​note>​
 +
 +<note important>​
 +În situația în care întâmpinați o eroare similară cu "​connection lost" sau "​unable to pop from an empty queue" atunci când începeți să consumați mesaje, este indicat să adăugați o metodă nouă pentru a crea un channel și să utilizați un channel nou creat atunci când începeți să ascultați.
 +
 +<​code>​
 +  def getChannel(self):​
 +    connection = pika.BlockingConnection(self.connection_params)
 +    return connection.channel()
 +</​code>​
 +</​note>​
  
  
 **Diagrame explicative ale exercițiului 3:** **Diagrame explicative ale exercițiului 3:**
  
 +<​spoiler>​
 {{:​isi:​laboratoare:​general-architecture.jpg?​400|}} {{:​isi:​laboratoare:​general-architecture.jpg?​400|}}
  
Line 315: Line 331:
  
 {{:​isi:​laboratoare:​rabbitmq-send-message.jpg?​500|}} {{:​isi:​laboratoare:​rabbitmq-send-message.jpg?​500|}}
 +</​spoiler>​
  
  
  
isi/laboratoare/07.1731875072.txt.gz · Last modified: 2024/11/17 22:24 by alexandru.predescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0