1. Project Overview
1.1 Project Name
Project Name: ChatNode
1.2 Project Description
Description: ChatNode is a real-time chat application built with Node.js (using the ws library) and MongoDB, with the front end developed using Flutter. The application supports personal chats, group chats, friend management, and group management. Users can communicate instantly, create and join groups, and have one-on-one chats with friends.
1.3 Main Technology Stack
Front End: Flutter
Back End: Node.js (Express, ws library)
Database: MongoDB
2. Feature Overview
2.1 User Management
User Registration: Users can register via email or phone number and set personal information (such as username, avatar, etc.).
User Login: Users can log in using the registered email or phone number.
Friend Management: Users can search for and add other users as friends, view their friend list, and remove friends.
2.2 Chat Features
Personal Chat: Users can engage in one-on-one real-time chat with friends, supporting text, emojis, images, and other message types.
Group Chat: Users can create group chats, invite friends to join, and send group messages.
Message Management: Supports viewing chat history, deleting messages, etc.
2.3 Group Management
Create Group: Users can create groups, set group names, and avatars.
Join Group: Users can join groups via invitations or search.
Group Member Management: Group owners and admins can manage group members (e.g., adding/removing members, setting admins, etc.).
3. Back End Architecture
3.1 Service Architecture
Node.js & Express: Express serves as the web framework for handling HTTP requests, routing, and other tasks.
WebSocket (ws library): Used for real-time bidirectional communication, supporting real-time message pushing and receiving.
MongoDB: Used for storing user information, friend relationships, chat records, group information, and other data.
3.2 WebSocket Communication
Connection and Disconnection: When users connect to the WebSocket server, the server establishes the connection and cleans up when users disconnect.
Message Passing: When users send messages, they are transmitted to the server via WebSocket. The server forwards the message to the appropriate recipient based on the message type (personal or group message).
Event Handling: Handles events such as sending and receiving messages.
3.3 MongoDB Integration
User Data Storage: Includes basic user information, friend lists, group information, etc.
Message Data Storage: Stores chat records, including message content, sender, receiver, timestamp, etc.
Schema-less Design: Stores documents in JSON format, allowing flexible handling of data structure changes.
3.4 Security
User Authentication: Uses JWT (JSON Web Token) for user authentication to ensure communication security.
Data Encryption: Encrypts sensitive information during storage and transmission.
Protection Against XSS and CSRF Attacks: Performs necessary filtering and validation during input and output processing.
4. Front End Architecture
4.1 Flutter Front End Architecture
UI Components: Utilizes Flutter's component-based architecture to create chat interfaces, friend lists, group lists, and other features.
State Management: Manages application state using tools like Bloc.
Network Communication: Uses the http package or Dio library for communication with the back end, and WebSocket for real-time message pushing.
4.2 Front End and WebSocket Integration
Connect to WebSocket: After user login, the front end connects to the server via WebSocket.
Message Pushing: Received messages are displayed in real-time on the front end, supporting message notifications and unread message counts.