软件工程学习日志2025.10.21

news/2025/10/21 22:51:31/文章来源:https://www.cnblogs.com/dynastyeast/p/19156598

项目概述

在本次开发任务中,我使用Trae框架成功实现了一个功能完整的即时在线聊天软件。该应用支持文字和图片的实时发送与接收,界面简洁美观,充分体现了现代Web应用的设计理念。

技术架构

前端技术栈

• 核心框架: Trae - 轻量级的HTTP客户端库

• 界面构建: 原生HTML5 + CSS3 + JavaScript

• 通信模拟: 自定义WebSocket模拟类

• 数据格式: JSON

项目结构

chat-app/
├── index.html # 主页面
├── style.css # 样式文件
└── script.js # 业务逻辑

核心功能实现

  1. 用户界面设计

界面采用经典的聊天应用布局,分为三个主要区域:

顶部标题栏
• 应用名称"即时聊天室"

• 开发者信息展示(张三 | 学号:20230001)

• 实时连接状态指示器

消息显示区域
• 支持文本和图片消息显示

• 区分发送和接收消息样式

• 自动滚动至最新消息

消息输入区域
• 多行文本输入框

• 文字发送按钮

• 图片上传功能

  1. 消息处理机制

文本消息处理
function sendTextMessage() {
const content = messageInput.value.trim();
if (content === '') return;

const message = {type: 'text',sender: currentUser.id,content: content,timestamp: new Date().toISOString()
};displayMessage(message, 'sent');
socket.send(JSON.stringify(message));

}

图片消息处理
function sendImageMessage(file) {
const reader = new FileReader();
reader.onload = function(e) {
const message = {
type: 'image',
sender: currentUser.id,
content: e.target.result,
timestamp: new Date().toISOString()
};

    displayMessage(message, 'sent');socket.send(JSON.stringify(message));
};
reader.readAsDataURL(file);

}

  1. 通信模拟实现

由于实际WebSocket服务器部署需要后端支持,本项目实现了MockWebSocket类来模拟实时通信:
class MockWebSocket {
constructor(url) {
// 模拟连接建立
setTimeout(() => {
if (this.onopen) this.onopen({ type: 'open' });
this.updateStatus(true);
}, 1000);
}

send(data) {// 模拟消息接收和自动回复setTimeout(() => {if (this.onmessage) {const response = this.generateResponse(data);this.onmessage({ data: JSON.stringify(response) });}}, 500);
}

}

关键技术亮点

  1. 响应式设计

• 使用Flexbox布局确保在不同屏幕尺寸下的良好显示

• 消息气泡自适应宽度,最大宽度限制为70%

  1. 用户体验优化

• 消息发送后自动清空输入框

• 支持Enter键快速发送

• 实时滚动至最新消息

• 连接状态视觉反馈

  1. 数据管理

• 使用JSON格式进行消息传输

• 为每条消息添加时间戳和发送者信息

• 支持多种消息类型扩展

开发挑战与解决方案

挑战1:实时通信模拟

问题:在没有真实后端服务器的情况下实现消息的实时收发。

解决方案:
• 创建MockWebSocket类模拟WebSocket行为

• 使用setTimeout模拟网络延迟

• 实现自动回复机制展示双向通信效果

挑战2:图片处理

问题:图片文件的读取和显示。

解决方案:
• 使用FileReader API读取图片文件

• 将图片转换为DataURL格式进行传输

• 在前端直接渲染Base64编码的图片

挑战3:状态管理

问题:连接状态和消息状态的实时更新。

解决方案:
• 实现状态指示器组件

• 使用CSS类切换显示不同状态

• 为每条消息添加已读/未读状态(可扩展)

功能扩展建议

本项目为基础版本,可以考虑以下扩展方向:

  1. 用户系统:实现用户注册、登录功能
  2. 多人群聊:支持多个用户同时在线聊天
  3. 消息状态:已发送、已送达、已读状态显示
  4. 文件传输:支持多种文件类型发送
  5. 消息加密:端到端加密保护隐私
  6. 消息记录:本地存储聊天记录
  7. 移动端适配:PWA渐进式Web应用

部署与运行

本地运行

  1. 创建项目文件夹
  2. 将提供的代码保存为对应文件
  3. 在浏览器中打开index.html

生产环境部署建议

  1. 配置真实的WebSocket服务器(如Socket.IO)
  2. 图片上传至云存储服务
  3. 启用HTTPS确保安全
  4. 添加服务端用户认证

总结

通过本次开发实践,我深入掌握了以下技术:

  1. Trae框架的应用:虽然Trae主要用于HTTP请求,但本项目展示了如何将其与其他技术结合使用
  2. 前端实时通信:理解了WebSocket通信原理和实现方式
  3. 现代CSS布局:Flexbox的实际应用技巧
  4. 文件API使用:图片上传和预览的实现方法
  5. 模拟开发:在没有后端支持的情况下进行前端功能验证

这个聊天应用虽然简单,但包含了即时通讯软件的核心功能,为后续开发更复杂的企业级应用奠定了坚实基础。项目的模块化设计和清晰的代码结构也体现了良好的软件开发实践。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/942742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[PaperReading] DeepSeek-OCR: Contexts Optical Compression

目录DeepSeek-OCR: Contexts Optical CompressionTL;DRMethodDeepEncoderDeepDecoderDataExperiment总结与思考相关链接 DeepSeek-OCR: Contexts Optical Compression link 时间:25.10.20 单位:DeepSeek 作者相关工作…

Win10安装WindowsCamera相机

在一些很旧的win10非正式版中,相机可能缺失,很老的win10只能用过时的WindowsCamera相机。这里给出一个安装包,当然新系统也可安装 夸克网盘下载 首先,打开开发者模式(如果有),不然无法安装然后右键打开——以管…

简易的本地部署OI-Wiki方法 for CCSP

在联网环境下执行 git clone https://gitee.com/OI-wiki/OI-wiki.git -b gh-pages拷贝文件后,在离线环境下执行 cd OI-wiki python -m http.server即可本地运行OI-wiki, 默认在localhost:8000上运行

[systemd] 如何为systemd服务进行资源限制

[systemd] 如何为systemd服务进行资源限制$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");目录01 简介02 查看限制03 可配置的参数3.1 CPU限制3.1.1 CPU时间…

以TrustedInstaller/System用户运行软件

有时电脑上会出现一些不明杀毒软件,直接删除是删不掉的:这时候我们需要TrustedInstaller/System权限,这个软件就派上用场了,这个软件并非漏洞提权,而是administer权限平级运行 警告:使用本工具需要有一定的计算机…

10月21号

今天上午进行了激光工程实训

React Native 启动流程 (Android版)

React Native 启动流程 (Android版)React Native 启动流程 (Android版) 我们从骨架项目MainActivity说起.其继承实现了ReactActivity. 进入MainActivity,先反射MainActivity执行其父类ReactActivity和自己的构造方法。…

NOIP 二十六

区间DPA. 圆心处向周围连边就将整个圆分成了若干个不相关的部分。断环成链,记 \(f[l, r]\) 为 \([l, r]\) 内连通的最小代价,转移考虑是否选择 \((l, r)\) 这条边。 枚举分界点转移。 注意当目前区间大于半圆的时候不…

Say 题选记 (10.19 - 10.25)

P3702 [SDOI2017] 序列计数 首先至少 1 个质数可以容斥成随便选 - 只选合数。然后注意到第二维很小,直接矩阵快速幂即可。Code #include <bits/stdc++.h> using namespace std; const int M = 2e7 + 5, K = 1e2…

宝塔面板

为什么需要宝塔面板linux终端是一个全是命令行的东西,不便于管理因此安装宝塔面板,就是一个服务器的可视化桌面或者控制中心一键安装运行环境(最核心的便利) 你想在服务器上搭建一个网站,通常需要安装:Web服务器…

泰勒展开

我们不妨令 \(x\geq x_0\)。 \[f(x) = f(x_0) + \int^x_{x_0}f(t)\text{d}t \]然后我们换一下积分变量。 \[f(x) = f(x_0) + \int^x_{x_0}f(t)\text{d}(t - x) \]然后我们分部积分。 \[f(x) = f(x_0) + \int^x_{x_0}(t…

机器学习基础 -- 线性回归模型

线性回归模型在机器学习中,线性回归模型是一种基础的模型算法,其数学原理通过最小二乘法使欧式距离(均方误差)最小化来求出w和b。本篇文章将介绍一些数学原理,给定几个数据并通过scikit-learn库中集成的LinearReg…

因果机器学习算法新进展解析

某中心将新型因果机器学习算法开源至DoWhy库,这些算法基于图形因果模型,能执行根因分析、因果结构学习和分布变化归因等复杂因果查询,已在供应链和云服务等多个场景得到实际应用。开源因果机器学习算法 我们很高兴宣…

一键生成爆款文章,并自动发布!

最近在疯狂的玩 n8n,也越来越发现他的强大之处了。 同时也感叹目前的 AI 生态真的很完善,而且 AI 的成果也越来越好了,甚至可以超过很多普通人。 这不,今天刚搭建了一个:一键生成小红书爆款文章,并自动发布的工作…

软件工程作业三

计算机科学与技术 王阿丽亚阿不来海提 3223004639 计算机科学与技术 阿依古再丽艾力
3223004595这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience这个作业要求在哪里 https:…

1188. 设计有限阻塞队列

1188. 设计有限阻塞队列 题目描述实现一个拥有如下方法的线程安全有限阻塞队列:BoundedBlockingQueue(int capacity) 构造方法初始化队列,其中capacity代表队列长度上限。void enqueue(int element) 在队首增加一个e…

MySQL 创建和授权用户

查看所有用户 SELECT user, host FROM mysql.user;查看指定用户的权限 SELECT * FROM mysql.user WHERE user=root创建和授权用户创建一个用户CREATE USER readonly@% IDENTIFIED BY 123456;给用户赋予只读权限GRANT S…

MySQL分页解决方案

一、深分页问题背景 当分页偏移量(OFFSET)过大时(如LIMIT 100000, 20),MySQL需要扫描并丢弃前100,000条记录,导致:查询性能急剧下降 服务器资源浪费 响应时间变长二、解决方案详解 1. 游标查询(Cursor-based P…

二维坐标旋转公式推导

二维坐标旋转公式一、核心概念 在二维坐标系中,一个点围绕某个旋转中心旋转时,其坐标会发生变化。 旋转可分为两种情况:绕坐标原点 (0,0) 旋转 绕任意点 (cx, cy) 旋转推导基于三角函数与极坐标的关系。二、绕原点 …

Failed to resolve: org.webrtc:google-webrtc:1.0.32006

参考文章:https://blog.csdn.net/rosyrays1/article/details/148427678 这是一个在安卓端实现音视频功能时遇到的问题 解决方案2: gradle dependencies方式: 使用一些开源社区自制仓库的webrtc包名 比如这个(亲测可…