Building a Real-time Chat Application Using Angular and Websockets

Creating a real-time chat application can significantly enhance user engagement by providing instant communication. Combining Angular, a popular front-end framework, with WebSockets allows developers to build efficient, real-time messaging systems. This article guides you through the essential steps to develop a chat app using Angular and WebSockets.

Understanding WebSockets

WebSockets enable persistent, two-way communication between a client and server. Unlike traditional HTTP requests, WebSockets maintain an open connection, allowing data to be sent and received instantly. This makes them ideal for real-time applications like chat systems.

Setting Up the Angular Project

Begin by creating a new Angular project using the Angular CLI:

ng new chat-app

Navigate into the project directory:

cd chat-app

Install the WebSocket library, such as rxjs, which simplifies WebSocket communication:

npm install rxjs

Implementing WebSocket Service

Create a new service to manage WebSocket connections:

ng generate service services/websocket

In websocket.service.ts, import necessary modules and establish a connection:

import { Injectable } from ‘@angular/core’;

import { webSocket, WebSocketSubject } from ‘rxjs/webSocket’;

@Injectable({ providedIn: ‘root’ })

export class WebsocketService {

private socket$: WebSocketSubject;

constructor() {

this.socket$ = webSocket(‘ws://localhost:8080’);

}

sendMessage(msg: string) {

this.socket$.next(msg);

}

getMessages() {

return this.socket$.asObservable();

}

}

Creating the Chat Component

Generate a new component for the chat interface:

ng generate component components/chat

In chat.component.ts, inject the WebSocket service and handle messages:

import { Component, OnInit } from ‘@angular/core’;

import { WebsocketService } from ‘../services/websocket.service’;

@Component({

selector: ‘app-chat’,

templateUrl: ‘./chat.component.html’,

styleUrls: [‘./chat.component.css’]

})

export class ChatComponent implements OnInit {

messages: string[] = [];

newMessage: string = ”;

constructor(private websocketService: WebsocketService) { }

ngOnInit() {

this.websocketService.getMessages().subscribe(msg => {

this.messages.push(msg);

});

}

send() {

if (this.newMessage.trim()) {

this.websocketService.sendMessage(this.newMessage);

this.newMessage = ”;

}

}

}

Chat Interface (HTML)

In chat.component.html, create the user interface:

<div class=”chat-container”>

<div class=”messages”>

<div *ngFor=”let msg of messages”>{{ msg }}</div>

</div>

<input [(ngModel)]=”newMessage” placeholder=”Type a message” />

<button (click)=”send()”>Send</button>

</div>

Running the Application

Ensure you have a WebSocket server running on ws://localhost:8080. You can implement this with Node.js or use existing solutions.

Start your Angular app with:

ng serve

Open your browser at http://localhost:4200 to see your chat application in action. You can send messages, which will appear instantly for all connected users.

Building a real-time chat with Angular and WebSockets offers a powerful way to facilitate instant communication. With proper setup, it can be scaled for more complex applications.