当前位置: 首页 > 软件库 > Web应用开发 > Web框架 >

vue-chat

授权协议 Readme
开发语言 JavaScript
所属分类 Web应用开发、 Web框架
软件类型 开源软件
地区 不详
投 递 者 符渊
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Vue.js+Socket.io+Koa2打造一个智能聊天室

Vue.js全家桶+Socket.io+Express/Koa2 打造的一个智能聊天室。已经开源啦!为了方便大家学习,智能机器人、IP定位接口也开放了!接口请在源码中查看 ��

   QQ群里面的智能机器人很火,于是用Vue.js+Socket.io+Koa2打造了一个智能聊天室,实现了IP定位、在线群聊,加入了Emoji表情 �� ,以及接入了智能机器人 ��

前言

话说最近前端技术圈也有派系之争了,是好事还是坏事?萝卜青菜各有所爱,本项目采用的是Vue.js做前端页面展示,大家完全可以换成自己别的喜欢的,React、Angular等等,每个框架都有可取的地方,这里不多说 �� 下面扯到正题上 ��

预览

在线预览地址: �� https://microzz.com/vue-chat/

源代码

现在已经开源: �� https://github.com/microzz/vue-chat欢迎star和提出宝贵意见 ��

技术栈

  • Vue2.0:前端页面展示。
  • Socket.io:实现实时通信
  • Vuex:Vuex,实现不同组件间的状态共享
  • vue-router:页面路由切换
  • axios:一个基于 Promise 的 HTTP 库,向后端发起请求。
  • ExpressKoa2:因为vue-cli生成的项目是基于express的,所以在开发阶段我使用的是它,但是真正上线生产环境我换成了Koa2
  • Moment.js:一个时间处理的库,方便对时间进行格式化成需要的格式。
  • ES6ES7:采用ES6语法,这是以后的趋势。箭头函数、Promise等等语法很好用。
  • localStorage:保存用户信息以及聊天记录。
  • Webpack:vue-cli自带Webpack,但是需要自己改造一下,比如要对需要安装sass相关loader,vue-cli已经配置好了webpack,你只需要安装依赖就可以,使用的时候只需要<style lang="scss"></style>
  • SASS(SCSS):用SCSS做CSS预处理语言,有些地方很方便,个人很喜欢用。(详看 �� SASS用法指南)
  • flex:flex弹性布局,简单适配手机、PC端。
  • CSS3:CSS3过渡动画及样式。

分析

Socket.io

通过Express/Koa在服务端可以这样做:

// Server (app.js)

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(80);

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

客户端代码

// Client (index.html)

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>

不管是服务器还是客户端都有 emiton 这两个函数,可以说 socket.io 的核心就是这两个函数了,通过 emiton 可以轻松地实现服务器与客户端之间的双向通信。

emit :用来发射一个事件或者说触发一个事件,第一个参数为事件名,第二个参数为要发送的数据,第三个参数为回调函数(一般省略,如需对方接受到信息后立即得到确认时,则需要用到回调函数)。on :用来监听一个 emit 发射的事件,第一个参数为要监听的事件名,第二个参数为一个匿名函数用来接收对方发来的数据,该匿名函数的第一个参数为接收的数据,若有第二个参数,则为要返回的函数。socket.io 提供了三种默认的事件(客户端和服务器都有):connectmessagedisconnect 。当与对方建立连接后自动触发 connect 事件,当收到对方发来的数据后触发 message 事件(通常为 socket.send() 触发),当对方关闭连接后触发 disconnect 事件。

此外,socket.io 还支持自定义事件,毕竟以上三种事件应用范围有限,正是通过这些自定义的事件才实现了丰富多彩的通信。

最后,需要注意的是,在服务器端区分以下三种情况:

socket.emit() :向建立该连接的客户端广播socket.broadcast.emit() :向除去建立该连接的客户端的所有客户端广播io.sockets.emit() :向所有客户端广播,等同于上面两个的和

Vue.js

在Vue的方面就比较常规了,Vue全家桶:Vue2.0+Vuex+axios+vue-router,我GitHub的有几个开源项目可以参考 �� https://github.com/microzz

总结

  1. 组件状态多了用Vuex管理很方便,引用 Redux 的作者 Dan Abramov 的话说就是:

Flux 架构就像眼镜:您自会知道什么时候需要它。

  1. 事先一定要先想好整个页面组成,怎样去分组件开发,这样在开发阶段会事半功倍。
  2. Moment.js在Vue中用ES6的方式引入会有问题,可以尝试在main.js尝试这样import moment from 'moment' Vue.prototype.moment = moment;给Vue的原型上添加moment,这样就可以在Vue的实例中随意使用它了。
  3. get方式通过URL传参最好使用encodeURI对参数进行编码
  4. 一定要处理好那些异步操作,否则会带来各种问题。开发阶段使用的是Promise,上线时候使用了ES7的Async+Promise的组合,让异步操作更加合理。

About

关于我: �� https://microzz.com/about/

GitHub: �� https://github.com/microzz

E-mail: �� zhaohui@microzz.com

  • 1.安装 npm i vue-beautiful-chat 2.main.js中引入 import Chat from 'vue-beautiful-chat' Vue.use(Chat)  3.对接接口的完整代码(复制过去就可以用) <template> <div> <beautiful-chat :participants="participants"

  • 最近不是chatgpt很活吗?可是必须要科技上网才可以进入,所以我就参考其他人写的页面改写了一个网页版不需要chatgpt请求的网页,还可以请求图片哦。部署以后就可以直接使用废话不多说了直接上代码 <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> <script src="https://unpkg.com/axi

  • 【1】vue-resource Vue的一个插件,非官方库,多用于Vue1.X。详细介绍点击查看在线文档 下载vue-resource npm install vue-resource --save 引入vue-resource // 引入模块 import VueResource from 'vue-resource' main.js中声明使用 Vue.</

  • # 第一步:基于 Node.js 镜像创建一个新的镜像 FROM node:14.17.0-alpine as build # 第二步:在容器内创建并设置一个工作目录 WORKDIR /app # 第三步:将应用的依赖文件 package.json 和 package-lock.json 复制到容器内 COPY package*.json ./ # 第四步:使用 npm 安装依赖 RUN n

  • nvue和Vue之间的方法 第一种方法: 1、在Vue页面中使用plus.webview.postMessageToUniNView(data,nvueId) 发送信息,data为json格式,(只支持字符串),nvueId是nvue所在webview的id,viewId可以使用$getAppWebview()获取 2、在nvue的页面上使用globalEvent模块监听plusMassage事件

  • 第一步安装依赖 npm install recorderx --sava 这个包是用的recorder.js封装的基于h5的录音功能 第二步页面引入 import Recorderx, { ENCODE_TYPE } from "recorderx"; const rc = new Recorderx(); 第三步pc端鼠标撒手没效果 1.获取麦克风权限 这时候要手动开始录音调用麦克风获取权限,

  • vue实现简单在线聊天 引用mui的ui库,ES6的 fetch做网络请求 //html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,ma

  • 步骤 1.在nvue页面使用uni.postMessage(data),发送数据,data只能为json数据, 2.在app.vue页面里使用 onUniNViewMessage 进行监听,接受数据 代码示例 nvue页面 <template> <div @click="test"> <text>点击页面发送数据</text> </div> </template>

  • vue组件通讯的方式,并不局限于父子组件 一:props和$emit 适用于父子组件。 - 父组件向子组件传递 props 和事件 - 子组件接收 props ,使用 `this.$emit` 调用事件 直接代码是最方便的 每一步都有解释 --父组件 <HelloWorld msg='传递给子组件的内容' @sayHi="sayHi"/>//当子元素emit'sayHi'的时候会调用父元素

 相关资料
  • Chat simples utilizando Websocket, Vue.JS e PHP O Websocket é um protocolo que nos permite abrir uma comunicação bidirecional com o servidor utilizando um único soquete TCP (Transmission Control Proto

  • 构造器 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的: var vm = new Vue({ // 选项 }) 虽然没有完全遵循 MVVM 模式, Vue 的设计无疑受到了它的启发。因此在文档中经常会使用 vm 这个变量名表示 Vue 实例。 在实例化 Vue 时,需要传入一个选项对象,它可以包含数据、模板、挂载元素、方法、生命周期钩子等选项。全部的选

  • 前端(移动端&小程序)/后端(nodejs) 前端 : Vue + Mpvue(支持移动端与小程序) ; 后端 : koa(使用Koa2开发服务端)  Vue是一套用于构建用户界面的渐进式框架。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,`Vue` 也完全能够为复杂的单页应用提供驱动。 mpvue 是一个使用

  • 教你用Vue渐进式搭建聊天室,从JavaScript=>TypeScript English Document 前言 Vue+Socket.io这个轮子已经有很多人造过了,为了不重复造轮子,我将本项目以三阶段实现(大家可以在github中的Releases查看): 纯前端(Vuex) 后端+前端(JavaScript) 后端+前端(TypeScript) 希望能给大家一个渐进学习的经验。 预览地址

  • vue

    教程简介 本教程要实现一个简单的后台管理系统,包含登陆、数据列表、数据查询、列表分页、添加数据、修改数据和删除数据等功能,教程会从 Vue 入门开始讲解,包含 es6、Sass、Webpack、Bootstrap、jQuery 等技术,再到后台管理系统的一些常规功能,用 Vue 如何去实现。 也许会有人质疑 Vue 和 jQuery 的搭配,在我本人看来,jQuery 本身已很成熟,而且包含了很多

  • FAQ 哇,非常长的一页!是否意味着 Vue 2.0 已经完全不同了呢,是否需要从头学起呢,Vue 1.0 的项目是不是没法迁移了? 非常开心地告诉你,并不是!几乎 90% 的 API 和核心概念都没有变。因为本节包含了很多详尽的阐述以及许多迁移的例子,所以显得有点长。不用担心,你不必从头到尾把本节读一遍! 我该从哪里开始项目迁移呢? 首先,在当前项目下运行迁移工具。我们非常谨慎地把高级 Vue