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…

相关文章
|
9天前
|
XML 存储 Java
11:Servlet中初始化参数的获取与应用-Java Web
11:Servlet中初始化参数的获取与应用-Java Web
22 3
|
14天前
|
JavaScript 前端开发 持续交付
【专栏】Vue.js和Node.js如何结合构建现代Web应用
【4月更文挑战第27天】本文探讨了Vue.js和Node.js如何结合构建现代Web应用。Vue.js作为轻量级前端框架,以其简洁易懂、组件化开发、双向数据绑定和虚拟DOM等特点受到青睐;而Node.js是高性能后端平台,具备事件驱动、非阻塞I/O、丰富生态系统和跨平台优势。两者结合实现前后端分离,高效通信,并支持热更新、持续集成、跨平台和多端适配,为开发高性能、易维护的Web应用提供强有力的支持。
|
1天前
|
缓存 监控 前端开发
探索现代Web应用的性能优化实践
【5月更文挑战第10天】随着互联网技术的飞速发展,用户对Web应用的响应速度和流畅度要求越来越高。性能优化已成为前端开发中不可或缺的一环。本文将深入探讨Web应用性能优化的关键策略,包括代码分割、资源压缩、缓存利用、服务端渲染等技术手段,以及如何通过工具进行性能监测和分析。我们将从原理出发,结合实际案例,帮助开发者构建更快速、更高效的Web应用。
|
9天前
|
设计模式 存储 前端开发
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
24 4
|
9天前
|
存储 前端开发 安全
13:会话跟踪技术Session的深度应用与实践-Java Web
13:会话跟踪技术Session的深度应用与实践-Java Web
23 3
|
9天前
|
存储 前端开发 搜索推荐
12:会话跟踪技术Cookie的深度应用与实践-Java Web
12:会话跟踪技术Cookie的深度应用与实践-Java Web
22 4
|
10天前
|
缓存 移动开发 前端开发
【专栏:HTML与CSS前端技术趋势篇】HTML与CSS在PWA(Progressive Web Apps)中的应用
【4月更文挑战第30天】PWA(Progressive Web Apps)结合现代Web技术,提供接近原生应用的体验。HTML在PWA中构建页面结构和内容,响应式设计、语义化标签、Manifest文件和离线页面的创建都离不开HTML。CSS则用于定制主题样式、实现动画效果、响应式布局和管理字体图标。两者协同工作,保证PWA在不同设备和网络环境下的快速、可靠和一致性体验。随着前端技术进步,HTML与CSS在PWA中的应用将更广泛。
|
10天前
|
前端开发 JavaScript 搜索推荐
【专栏:HTML 与 CSS 前端技术趋势篇】HTML 与 CSS 在 Web 组件化中的应用
【4月更文挑战第30天】本文探讨了HTML和CSS在Web组件化中的应用及其在前端趋势中的重要性。组件化提高了代码复用、维护性和扩展性。HTML提供组件结构,语义化标签增进可读性,支持用户交互;CSS实现样式封装、布局控制和主题定制。案例展示了导航栏、卡片和模态框组件的创建。响应式设计、动态样式、CSS预处理器和Web组件标准等趋势影响HTML/CSS在组件化中的应用。面对兼容性、代码复杂度和性能优化挑战,需采取相应策略。未来,持续发掘HTML和CSS潜力,推动组件化开发创新,提升Web应用体验。
|
10天前
|
缓存 前端开发 JavaScript
探索现代Web应用的性能优化策略移动应用开发的未来之路:跨平台与原生之争
【4月更文挑战第30天】随着互联网技术的迅猛发展,Web应用已成为信息交流和商业活动的重要平台。用户对Web应用的响应速度和稳定性有着极高的期望,这促使开发者不断寻求提升应用性能的有效途径。本文将深入探讨针对现代Web应用进行性能优化的关键策略,包括前端优化、后端优化以及数据库层面的调优技巧,旨在为开发者提供一套全面的优化工具箱,帮助他们构建更快速、更高效的Web应用。
|
10天前
|
开发框架 JavaScript 前端开发
【JavaScript 与 TypeScript 技术专栏】TypeScript 在 Web 开发中的前沿应用
【4月更文挑战第30天】TypeScript在Web开发中日益重要,以其强大的类型系统提升代码质量,支持组件化开发,与React、Vue、Angular等框架良好集成。在大型项目管理中,TypeScript助于代码组织和优化,提高团队协作效率。此外,它提升开发体验,提供智能提示和错误检测。众多成功案例证明其前沿应用,未来将在Web开发领域持续发挥关键作用。