使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室

使用Angular和Node.js、socket.io搭建聊天室及多人聊天室的攻略如下:

环境安装

在开始前,需要安装好以下环境:

  • Node.js
  • Angular CLI

在命令行中输入以下命令进行安装:

# 安装 Node.js
sudo apt install nodejs
sudo apt install npm

# 安装 Angular CLI
npm install -g @angular/cli

后端

项目初始化

首先,在命令行中执行以下命令,创建一个新的 Node.js 项目:

mkdir socket-chatroom-backend
cd socket-chatroom-backend
npm init -y

然后,安装 socket.io 和 express:

npm install --save socket.io express

编写代码

创建 server.js 文件,并输入以下代码:

const express = require('express');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);

io.on('connection', (socket) => {
  socket.on('login', (data) => {
    socket.username = data.username;
    io.emit('user joined', socket.username);
  });

  socket.on('chat message', (msg) => {
    io.emit('chat message', `${socket.username}: ${msg}`);
  });

  socket.on('disconnect', () => {
    io.emit('user left', socket.username);
  });
});

http.listen(3000, () => {
  console.log('listening on *:3000');
});

以上代码创建了一个 Express 应用,并使用 socket.io 实现了聊天室后端的核心功能:接收用户连接、处理用户登录、处理聊天消息、处理用户断开连接。

运行项目

在命令行中执行以下命令,启动 Socket.IO 服务器:

node server.js

至此,后端代码的编写完成。

前端

创建 Angular 项目

首先,在命令行中输入以下命令,创建一个新的 Angular 项目:

ng new socket-chatroom-frontend

然后,进入项目目录,并启动开发服务器:

cd socket-chatroom-frontend
npm start

此时,打开浏览器访问 http://localhost:4200/ 可以看到默认的 Angular 欢迎页面。

编写代码

界面设计

在 app.component.html 文件中,输入以下代码,实现聊天室的界面设计:

<div>
  <h2>Socket.IO Chat</h2>
  <div>
    <input type="text" [value]="username" (input)="username=$event.target.value" placeholder="Your name">
    <button (click)="login()">Login</button>
  </div>
  <div *ngIf="isLoggedIn">
    <div>
      <div *ngFor="let message of messages">
        {{ message }}
      </div>
    </div>
    <div>
      <input type="text" [(ngModel)]="message" placeholder="Your message">
      <button (click)="send()">Send</button>
    </div>
  </div>
</div>

以上代码实现了聊天室的登录界面、消息列表和发送消息的功能。

TypeScript 代码

在 app.component.ts 文件中,输入以下代码,实现聊天室的核心功能:

import { Component } from '@angular/core';
import * as io from 'socket.io-client';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  private socketClient: SocketIOClient.Socket;
  private isLoggedIn = false;
  private messages: string[] = [];
  private message = '';
  private username = '';

  constructor() {
    this.socketClient = io('http://localhost:3000');

    this.socketClient.on('user joined', (username) => {
      this.messages.push(`${username} joined the chat`);
    });

    this.socketClient.on('user left', (username) => {
      this.messages.push(`${username} left the chat`);
    });

    this.socketClient.on('chat message', (message) => {
      this.messages.push(message);
    });
  }

  login() {
    this.socketClient.emit('login', { username: this.username });
    this.isLoggedIn = true;
  }

  send() {
    if (this.message) {
      this.socketClient.emit('chat message', this.message);
      this.message = '';
    }
  }
}

以上代码实现了聊天室的核心功能:连接 Socket.IO 服务器、处理用户登录、处理聊天消息、实时更新消息列表。

运行项目

在命令行中执行以下命令,启动前端项目:

npm start

然后,打开浏览器访问 http://localhost:4200/,即可使用聊天室功能。

示例说明

示例 1

假设有两个用户 A 和 B,他们都进入了聊天室。A 发送了一条消息 "Hello",B 立即能够收到这条消息,并在消息列表中显示 "A: Hello"。

示例 2

假设有三个用户 A、B 和 C,他们都进入了聊天室。C 进行登录操作,输入共享密码,管理员同意后C加入聊天室。A 发送了一条消息 "How are you today?",B 和 C 立即能够收到这条消息,并在消息列表中显示 "A: How are you today?"。当 C 感到这句话有意思,定位消息进行回答时,A 离开了聊天室。B 和 C 立即收到系统提示,"A left the chat"。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • TypeScript与JavaScript对比及打包工具比较

    一、TypeScript与JavaScript对比 何为TypeScriptTypeScript是JavaScript的一个超集,它包含了JavaScript的所有元素,并且扩展了JavaScript的语法。TypeScript的代码需要编译为JavaScript才能在浏览器或者Node.js环境中运行。 TypeScript与JavaScript的主要差异…

    node js 2023年6月9日
    00
  • 你所未知的3种Node.js代码优化方式

    当我们在编写 Node.js 应用时,优化代码不仅能提高应用性能,还能减少资源消耗、提高稳定性。下面介绍几种 Node.js 代码优化方式: 一、使用 PM2 进行进程管理 PM2 是一个用于管理 Node.js 进程的开源工具,能够实现非常强大的进程管理和自动化部署,可以大大提高 Node.js 应用的可用性和性能。使用 PM2 能够: 自动监听代码变化并…

    node js 2023年6月7日
    00
  • nodejs基础之常用工具模块util用法分析

    Node.js基础之常用工具模块util用法分析 Node.js提供了一个常用工具模块util,包含了一些常用的工具函数,本文将对util模块的常用方法进行详细讲解。 util.inherits util.inherits是一个实现对象间原型继承的函数。 语法: util.inherits(constructor, superConstructor) 参数:…

    node js 2023年6月8日
    00
  • JS实现返回上一页并刷新页面的方法分析

    JS实现返回上一页并刷新页面的方法分析 在 Web 开发中,有时候需要在页面跳转后返回上一页并刷新页面,这可以通过 JavaScript 来实现。针对这个需求,本文将介绍两种实现方法。 方法一:使用window.location.reload() window.location.reload() 方法可以重新加载当前页面,结合 history.go(-1) …

    node js 2023年6月8日
    00
  • nodejs获取表单数据的三种方法实例

    下面为你详细讲解“nodejs获取表单数据的三种方法实例”的完整攻略。 一、背景介绍 在Web开发中,表单提交是经常用到的一种方式,因为它可以实现用户向服务器端提交数据的操作。而在Node.js中,我们可以使用node-formidable、body-parser等模块来获取表单数据。本文将介绍这两种模块的使用方法,以及另外一种获取表单数据的简单方法。 二、…

    node js 2023年6月8日
    00
  • node.js中的fs.lchmod方法使用说明

    Node.js中的fs.lchmod方法使用说明 简介 fs.lchmod 方法用于更改一个文件的权限模式,与 fs.chmod 不同的是,它更改的是符号链接的文件权限而非目标文件,Windows 操作系统上不支持该方法。 语法 fs.lchmod(path, mode, callback) 参数说明: path:需要更改权限的文件路径。 mode:8 位权…

    node js 2023年6月8日
    00
  • node实现的爬虫功能示例

    下面我来为你详细讲解如何使用Node.js实现网页爬虫功能。 准备工作 在开始编写代码之前,我们需要先安装Node.js和一些相关的模块。具体步骤如下: 1.1 安装Node.js 请先在官网https://nodejs.org/zh-cn/下载Node.js的安装包,然后按照提示安装即可。 1.2 安装Request模块 我们使用Request模块来发起h…

    node js 2023年6月8日
    00
  • Sea.JS知识总结

    Sea.JS知识总结 什么是Sea.JS? Sea.JS是一个遵循CMD规范的JavaScript模块加载器,可以实现模块的异步加载、依赖管理等功能,可以使得JavaScript算法复杂的应用变得更具可维护性和清晰可见性。 Sea.JS特点 遵循CMD规范,模块的代码放在单独的文件中,在需要的时候动态加载,使得代码更为模块化、复用性更好、依赖性管理更为清晰。…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部