Meet.me
The recent pandemic has changed the ways of working collaboratively: it has moved to online services such as video conferencing. We aim to facilitate the collaboration experience with our application: meet.me. Meet.me has the features of chats, a whiteboard, screen-sharing, summary generation and telemetry. The whiteboard is a canvas with tools such as pen, brush, shapes, eraser, and features such as undo and redo. The summary generation uses the chats from the room to provide a succinct summary. The telemetry provides statistical plots & information.
Queue Management
Overview
Communication between computers has become incessantly imperative in these modern times where everyone owns a device that can be connected to the internet. Most of the applications developed contain a networking module that enables the application to communicate with other devices. Exploring the underlying architecture of such a networking module can be quite travailing. This design spec provides a broad overview of how the networking module functions and specifically focuses on a submodule called Queue Management and its implementation.
Background
Queue Management forms an essential part of a Networking Module. In computer networking, queuing delay forms the majority of the time lag between the exchange of information between two nodes. Queue Management in essence deals with maintaining a buffer in the form of a queue, in a particular node, to store and transmit the incoming packets from different nodes. Queue Management is used in software applications for the same reasons, except that here the nodes from which we receive information are different modules in the application that are trying to communicate with another device. Hence, to increase the performance of our communication system it is imperative to have a fast and robust queue implementation that can buffer all the incoming messages in parallel and service each of them to the listening sockets.
Problem
Consider two systems A (sender machine) and B(receiver machine) running the same application. Assume that the application consists of several modules of which some require communication like file sharing, messaging, screen sharing etc. Now machine A decides to send a message to machine B via the application. A rudimentary approach is when the send function in the application is called, the message is instantly put into the open socket and the send function is blocked until the socket is free. This way whenever the socket is free, the send function is unblocked. This approach causes other modules which want to send a message, to wait that results in superfluous use of the computational resource. Once the message is received on machine B, the communication module should make sure that the appropriate module is receiving this message. Again, another rudimentary approach is to make all the modules listen on the open socket and process the message at the same time to determine which module it belongs to. This again has its conspicuous fallacies, as each module should be processing the message to discern whether it belongs to the module or not. The goal is to deal with this predicament of having multiple modules wanting to send messages and continue their execution on the sending side and to send the message to the appropriate module on the receiving side.
Design Choices
Queue Management plays different roles depending on whether it is a sender/receiver. On the sender side, the task of queue management is to provide a stable data structure to collect the stream of messages from all the other modules that want to send messages. On the receiving side, it needs to collect the message and send it to the appropriate module.
Concurrent Single FIFO Queue
A global queue handles the queue management where each module enqueues items into the global queue. On the other end, the socket keeps listening on this queue and when it finds an item in the queue it dequeues it and transmits it across the network.
Concurrent Multilevel Queues
Multilevel queue maintains 4 sets of individual queues for each type of module. Each module takes in the message and enqueues it into the appropriate queue. Each queue is given a certain weight, i.e. for example whiteboard, screen share, files, chats are each given a weight of 4,3,2,1 respectively based on the priority. This means that while dequeuing only after 4 whiteboard dequeues we can dequeue the screen share. Only after 3 screenshare dequeues we can dequeue files. If in any case, the queue is empty, we skip it and go on to deque the next queue. In this way, we define our priority since 4 a regular implementation of priority queue based on heaps will always have the most prioritized one at the top of the heap which will starve the remaining modules. The concurrent nature of the queue system makes it possible for a single thread to enqueue a data item, and a single thread to dequeue a data item.
Module Specification
Queue Interface
Packet Class
Sender Queue
Sending queue is a part of the socket listener which will be covered in detail in the Sockets section.
Receiver Queue
The receiver queue system contains a single receiving queue that is enqueued by the socket listener module. The receiver queue module listens on this queue. If this queue is not empty, then the queue starts to dequeue packets from the queue. These packets are then scanned to identify the module they belong to and the corresponding module handler is called.
Activity Diagram
Dependency Diagram
Installation
Follow the installation guide.
Host over the internet
- Download ngrok
- Run the server and get port
ngrok.exe tcp -region=in \<port>
- Get the ngrok IP, and it’s port. E.g.: 0.tcp.in.ngrok.io:17000
- log in to client with the above credentials.
Host in fixed port
- Set your environmental variables
MEETME_PORT
to desired fixed port. - E.g:
MEETME_PORT=8080
The Team
Project Mentor | Teaching Assistant |
---|---|
Ramaswamy Krishnan | Sreejith K P |
Project Manager | Technical Architect |
---|---|
Vishal Rao | Yogesh R |
Networking Module (3+1) | Dashboard Module (4+1) | Content Module (3+1) |
---|---|---|
Subhash S (Team Lead) | Siddharth Shah (Team Lead) | Sahil J. Chaudhari (Team Lead) |
Alisetti Sai Vamsi | Sairoop | Yuvraj Raghuvanshi |
Tausif Iqbal | Parmanand Kumar | Vishesh Munjal |
Abdullah Khan | Harsh Parihar | Sameer Dhiman |
Rajeev Goyal |
Screen Share & Whiteboard Module (5+1) | UX Module (7+1) |
---|---|
Manas Sharma (Team Lead) | Raswanth Murugan (Team Lead) |
Ashish Kumar Gupta | Irene Casmir |
Neeraj Patil | Mitul Kataria |
Parul Sangwan | Suchitra Yechuri |
Gurunadh | Pulavarti Vinay Kumar |
Chandan Srivastava | P S Harikrishnan |
Arpan Tripathi | |
Aniket Singh Rajpoot |