Vite2 + Strve3:从 0 到 1 实现一款 Web 聊天室应用

简介: Vite2 + Strve3:从 0 到 1 实现一款 Web 聊天室应用

前言


之前,使用 Vue3 做过一次聊天室,如果想看这篇文章的,可以去我的文章里搜一下。


前几天Strve.js@3.1.0正式发布,所以想借此机会用它来实操一下。Vite 与 Strve3 到底怎么从 0 到 1 实现一款 Web 聊天室应用的。


实战


首先,我们可以打开maomincoding.gitee.io/strvejs-doc…这个网址。


然后,我们直接用 Create Strve App 来搭建 Strve 项目,我们这里选择yarn,因为我们要开发一款简单的单页面应用,所以这里暂时用不到 Strve Router,我们选用 strve 模板。


微信截图_20220506214736.png


最后,搭建项目完成。


微信截图_20220506214749.png


我们打开编辑器,项目结构是不是非常清爽。


微信截图_20220506214819.png


上面提到,我们只是开发一款单页面应用,所以可以把多余文件删除掉,最后项目文件结构是这样。


微信截图_20220506214830.png


下面,我们只需要关心 App.jsapp.css 这两个文件就可以。


我们先看一下App.js


微信截图_20220506214843.png


import { h, setData } from 'strvejs';
import './style/app.css';
let socket = null;
const path = 'ws://localhost:3000/'; // 服务端地址
const bg = randomRgb();
const name = new Date().getTime().toString();
const chatArr = [];
let textValue = '';
init();
function App() {
  return h/*html*/ `
    <div class="home">
        <div class="content">
        <ul $key class="chat-box">
        ${chatArr.map(
          (item) => h/*html*/ `
                <li  class="chat-item">
                ${
                  item.name === name
                    ? h/*html*/ `
                <div class="chat-msg mine">
                <p class="msg mineBg msg-m">${item.txt}</p>
                <p class="user" style="background: ${bg}">
                ${useName(item.name)}
                </p>
                </div>`
                    : h/*html*/ `
                <div  class="chat-msg other">
                <p class="user" style="background:${item.bg}" $key>
                ${useName(item.name)}
                </p>
                <p class="msg otherBg msg-o" $key>${item.txt}</p>
                </div>
                `
                }
                </li>`
        )}
        </ul>
        </div>
        <div class="footer">
        <textarea
            id="textValue"
            $key
            placeholder="说点什么..."
            autofocus
            onChange=${onTextValue}
        ></textarea>
        <div class="send-box">
            <p class="send active" onClick=${send}>发送</p>
        </div>
        </div>
    </div>
    `;
}
function useName(name) {
  const username = name.toString();
  return username.substring(name.length - 5, name.length);
}
// 随机获取头像背景
function randomRgb() {
  let R = Math.floor(Math.random() * 130 + 110);
  let G = Math.floor(Math.random() * 130 + 110);
  let B = Math.floor(Math.random() * 130 + 110);
  return 'rgb(' + R + ',' + G + ',' + B + ')';
}
// WebSocket初始化
function init() {
  if (typeof WebSocket === 'undefined') {
    alert('您的浏览器不支持socket');
  } else {
    socket = new WebSocket(path);
    socket.onopen = open;
    socket.onerror = error;
    socket.onclose = closed;
    socket.onmessage = getMessage;
  }
}
function open() {
  alert('服务连接成功');
}
function error() {
  alert('连接错误');
}
function closed() {
  alert('服务关闭');
}
// 监听信息
function getMessage(msg) {
  const obj = JSON.parse(msg.data);
  setData(() => {
    chatArr.push(obj);
  }).then(() => {
    const chatbox = document.querySelector('.chat-box');
    chatbox.scrollTop = chatbox.scrollHeight;
  });
}
function onTextValue(v) {
  textValue = v.target.value;
  v.target.value = '';
}
// 发送消息
function send() {
  if (textValue.trim().length > 0) {
    const obj = {
      name: name,
      txt: textValue,
      bg: bg,
    };
    socket.send(JSON.stringify(obj));
    textValue = '';
    document.querySelector('#textValue').focus();
  }
}
export default App;


WebSocket 服务大家也可以参考一下。


const ws = require('nodejs-websocket');
const server = ws.createServer((conn) => {
  conn.on('text', (str) => {
    broadcast(str);
  });
  conn.on('error', (err) => {
    console.log(err);
  });
});
server.listen(3000, function () {
  console.log('open');
});
// 群发消息
function broadcast(data) {
  server.connections.forEach((conn) => {
    conn.sendText(data);
  });
}


最后,我们打包部署一下。


微信截图_20220506214916.png


项目一览


最后,我把项目部署到线上了,www.maomin.club/site/myChat…,有感兴趣的可以浏览下,但是要注意言辞哦,小心被~


微信截图_20220506214933.png


微信截图_20220506214947.png


结语


本项目是基于 Strve.js 搭建的,如果你觉得还可以,麻烦帮我点个 Star~,支持一下,谢谢!


github.com/maomincodin…

相关文章
|
17天前
|
SQL 缓存 搜索推荐
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,涵盖从基础架构到性能优化的多个方面。通过分析当前主流后端技术的优缺点,并提供一些实用的解决方案和建议,帮助开发者更好地应对日常开发中的挑战。
33 1
|
6天前
|
Web App开发 JavaScript 前端开发
构建高效Web应用:Node.js与Express框架的深度整合
【9月更文挑战第28天】在现代Web开发领域,Node.js和Express框架的结合已成为打造高性能、易扩展应用的黄金组合。本文将深入探讨如何利用这一技术栈优化Web应用架构,提供具体实践指导,并分析其性能提升的内在机制。通过代码示例,我们将展示从基础搭建到高级功能的实现过程,旨在为开发者提供一条清晰的学习路径,以实现技术升级和项目效率的双重提升。
19 3
ly~
|
8天前
|
存储 监控 小程序
除了 Web 开发,PHP 还可以应用于哪些领域?
PHP 在 Web 开发之外还有多个应用场景:1)命令行脚本,如批量处理文件、数据库管理及系统监控;2)利用 PHP-GTK 等工具开发桌面应用,满足特定业务需求;3)结合微信云开发功能支持微信小程序后端,处理数据存储与用户认证;4)为小型游戏或特定类型游戏开发游戏服务器逻辑;5)在物联网领域作为后端语言处理设备数据交互与分析。
ly~
24 4
|
9天前
|
JavaScript 前端开发 UED
WebSocket在Python Web开发中的革新应用:解锁实时通信的新可能
在快速发展的Web应用领域中,实时通信已成为许多现代应用不可或缺的功能。传统的HTTP请求/响应模式在处理实时数据时显得力不从心,而WebSocket技术的出现,为Python Web开发带来了革命性的变化,它允许服务器与客户端之间建立持久的连接,从而实现了数据的即时传输与交换。本文将通过问题解答的形式,深入探讨WebSocket在Python Web开发中的革新应用及其实现方法。
23 3
|
8天前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
在快速发展的Web开发领域,高性能与高效响应是衡量应用质量的重要标准。随着Python在Web开发中的广泛应用,如何利用Python的协程(Coroutine)与异步函数(Async Functions)特性来优化Web应用的性能,成为了许多开发者关注的焦点。本文将从实战角度出发,通过具体案例展示如何运用这些技术来提升Web应用的响应速度和吞吐量。
12 1
|
12天前
|
中间件 API 开发者
深入理解Python Web框架:中间件的工作原理与应用策略
在Python Web开发中,中间件位于请求处理的关键位置,提供强大的扩展能力。本文通过问答形式,探讨中间件的工作原理、应用场景及实践策略,并以Flask和Django为例展示具体实现。中间件可以在请求到达视图前或响应返回后执行代码,实现日志记录、权限验证等功能。Flask通过装饰器模拟中间件行为,而Django则提供官方中间件系统,允许在不同阶段扩展功能。合理制定中间件策略能显著提升应用的灵活性和可扩展性。
15 4
|
22天前
|
人工智能 关系型数据库 数据安全/隐私保护
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,通过分析其在数据处理、业务逻辑实现和安全性保障方面的应用,揭示后端技术的核心价值。同时,本文还将讨论当前后端开发面临的主要挑战,如高并发处理、数据安全、微服务架构的复杂性等,并给出相应的解决方案。无论是后端开发者还是对后端技术感兴趣的读者,都可以通过这篇文章获得启发和指导。
|
1月前
|
前端开发 安全 JavaScript
构建高效Web应用:前后端分离架构的实践
【9月更文挑战第4天】在数字时代,Web应用已成为企业与用户互动的主要平台。本文将介绍如何通过前后端分离的架构设计来构建高效的Web应用,探讨该架构的优势,并分享实现过程中的关键步骤和注意事项。文章旨在为开发者提供一种清晰、高效的开发模式,帮助其在快速变化的市场环境中保持竞争力。
|
1月前
|
中间件 编译器 数据处理
在web开发中应用管道过滤器
【9月更文挑战第1天】本文介绍管道-过滤器架构将数据处理流程分解为一系列独立组件,通过管道连接,适用于数据流处理如图像处理、编译器设计等。通过具体实例说明了Gin如何有效支持管道-过滤器风格的设计,构建高性能Web服务。
41 9
|
6天前
|
JSON JavaScript 前端开发
构建高效Web应用:Node.js与Express框架的完美结合
【9月更文挑战第28天】在现代Web开发中,Node.js和Express框架的结合为创建高性能、易扩展的应用提供了强有力的支持。本文将深入探讨如何利用这两种技术构建一个简单但功能强大的Web服务,同时提供代码示例以加深理解。
下一篇
无影云桌面