技术栈

vue+vuex+vue-router+socket.io+koa2+mongodb+pm2自动化部署+图灵机器人+[npm script打包,cdn同步,服务器上传一个命令全搞定]

功能清单

登陆注册

获取聊天记录(包含前端分页优化)

发送文字,表情,文件消息

创建群组,添加群组,群组搜索

修改个人信息,群组信息

图片裁剪压缩上传

私聊

图灵机器人接入

定时任务爬取电影和btc等数字货币的价格并使用socket.io实时推送给所有客户端

前端一键打包同步到七牛cdn并上传到服务器的实现

server端的pm2自动部署

效果演示chrome下F12或者手机扫描下面的二维码

后端的代码暂时不开放出来,因为涉及到很多个人的配置数据,如果实在需要可以加微信 MSC199312 (需要付费0.0!),毕竟这个小项目断断续续也做了几个星期,也还花了些心思,而且涉及的知识点也都还是很广很实用的,还望理解,其实主要原因还是穷[泪奔]

部分代码

客户端 main.js

import Vue from 'vue'
import App from './App'
import router from './router'
import VueLazyload from 'vue-lazyload'
import store from '@/store'
import io from 'socket.io-client'
import '@/assets/js/remChange'
import '@/assets/js/request'
// import { wxConfig, updateShare } from '@/assets/js/wxenv'
import '@/assets/css/common.scss'
import 'swiper/dist/css/swiper.min.css'
import config from '@/assets/js/config'
import filters from '@/assets/js/filters'
import { openToast } from '@/assets/js/tools' Vue.config.productionTip = false // 初始化全局过滤器
Object.keys(filters).forEach(item => {
Vue.filter(item, filters[item])
}) // 懒加载
Vue.use(VueLazyload, {
attempt: 1,
// preLoad: 1.3,
error: require('./assets/images/404.png'),
loading: require('./assets/images/loading-img2.gif'),
// the default is ['scroll', 'wheel', 'mousewheel', 'resize', 'animationend', 'transitionend']
listenEvents: [ 'scroll' ]
}) Vue.prototype.$config = config router.beforeEach((to, from, next) => {
// 如果未匹配到路由
if (to.matched.length === 0) {
// 如果上级也未匹配到路由则跳转登录页面,如果上级能匹配到则转上级路由
from.name ? next({ name: from.name }) : next('/')
} else {
// 路由切换时改变页面标题
document.querySelector('title').innerHTML = to.name
// 统计代码
if (to.path) _czc.push(['_trackPageview', '/#' + to.fullPath], '')
next()
}
}) // 路由变化重新配置微信分享
router.afterEach(to => {
// wxConfig(() => updateShare())
}) // socket.io 初始化
const socket = io.connect(config.socketBase)
Vue.prototype.$socket = socket
Vue.prototype.$socketEmiter = (name, data) => {
store.commit('isLoading', true)
return new Promise((resolve) => {
socket.emit(name, data, res => {
console.log(`${name}>>>`, res)
store.commit('isLoading', false)
if (res.status === 1) {
resolve(res.data)
} else {
openToast({
msg: res.message,
duration: 1500
})
}
})
})
} /* eslint-disable no-new */
const app = new Vue({
el: '#app',
router,
store,
template: '<App/>',
components: { App }
})

server端 app.js

const Koa = require('koa')
const { resolve } = require('path')
const glob = require('glob')
const { connectDatabase, initAllSchema, initDefaultUser } = require('./database/init')
const config = require('./config') const useMiddlewares = app => {
glob.sync(resolve(__dirname, './middlewares', '**/*.js')).forEach(item => {
require(item)(app)
})
} (async () => { console.log('数据库初始化...')
await connectDatabase()
initAllSchema()
await initDefaultUser() const app = new Koa() console.log('挂载socket.io...')
const server = require('http').Server(app.callback())
const io = require('socket.io').listen(server)
require('./socket')(io) // 暴露出io可在其他地方做推送功能
module.exports.io = io console.log('挂载中间件...')
useMiddlewares(app) console.log('初始化定时任务...')
// 多了进行一下封装?
require('./tools/crawlMovie')
require('./tools/crawlCoin') server.listen(config.server.PORT, () => {
console.log('正在监听' + config.server.PORT + '端口...')
}) })()

贴上git地址欢迎给个star

部分运行截图









vue+koa2即时聊天,实时推送比特币价格,爬取电影网站的更多相关文章

  1. Django Channel实时推送与聊天

    先来看一下最终的效果吧 开始聊天,输入消息并点击发送消息就可以开始聊天了 点击 “获取后端数据”开启实时推送 先来简单了解一下 Django Channel Channels是一个采用Django并将 ...

  2. 【原创】node+express+socket搭建一个实时推送应用

    技术背景 Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新. 应用场景: 监控系统:后台硬件热插拔.LED.温度.电压发生变化 即 ...

  3. WEB 实时推送技术的总结

    前言 随着 Web 的发展,用户对于 Web 的实时推送要求也越来越高 ,比如,工业运行监控.Web 在线通讯.即时报价系统.在线游戏等,都需要将后台发生的变化主动地.实时地传送到浏览器端,而不需要用 ...

  4. 使用SignalR ASP.NET Core来简单实现一个后台实时推送数据给Echarts展示图表的功能

    什么是 SignalR ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功能添加到应用程序的功能. 实时 web 功能使服务器端代码可以立 ...

  5. 基于Node.js的实时推送 juggernaut

    基于Node.js的实时推送 juggernaut Juggernaut 基于 Node.js 构建.为浏览器和服务器端提供一个实时的连接,可在客户端和服务器端进行数据的实时推送,适合多角色游戏.聊天 ...

  6. 关于 实时推送技术--WebSocket的 知识分享

    今天学习了关于WebSocket的知识,觉得挺有用的,在这记录一下,也和大家分享一下!!有兴趣的可以看看哦 WebSocket简介 Web领域的实时推送技术,也被称作Realtime技术.这种技术要达 ...

  7. WebSocket(4)---实现定时推送比特币交易信息

    实现定时推送比特币交易信息 实现功能:跟虚拟币交易所一样,时时更新当前比特币的价格,最高价,最低价,买一价等等...... 提示:(1)本篇博客是在上一遍基础上搭建,上一篇博客地址:[WebSocke ...

  8. 基于HTTP协议之WEB消息实时推送技术原理及实现

    很早就想写一些关于网页消息实时推送技术方面的文章,但是由于最近实在忙,没有时间去写文章.本文主要讲解基于 HTTP1.1 协议的 WEB 推送的技术原理及实现.本人曾经在工作的时候也有做过一些用到网页 ...

  9. WebSocket实现站内消息实时推送

    关于WebSocket WebSocket是HTML5 开始提供的一种在单个TCP连接上进行全双工通讯的协议.什么是全双工?就是在同一时间可以发送和接收消息,实现双向通信,比如打电话.WebSocke ...

随机推荐

  1. redis数据类型的使用及介绍

    Redis数据类型 1.Sting类型 set命令 设置键值,存在则覆盖,不存在则新建 set key value EX 秒 设置有效时长为秒 nx 如果键不存在则新建,如果存在返回nil xx 只有 ...

  2. SQL Server--插入一天数据返回ID值

    这里将该功能写成了一个存储过程, 本来只写Insert的话,返回1,即影响的行数,该数据没太大应用意义. 想在Insert的基础上,返回新添加的这条数据的ID,两种方法: 1 .添加第17行的Sele ...

  3. PHP中http_build_query函数×tamp自动转化为×的解决办法

    出现这个原因只是在浏览器上显示的问题,右键查看源代码是没有问题的. 如果不想的看到只要让代码在显示在浏览器之前替换掉就可以了 /** * url地址参数 * @param $arr * @return ...

  4. php 23种设计模型 - 享元模式

    享元模式 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. ...

  5. Android 12(S) 图形显示系统 - BufferQueue的工作流程(八)

    题外话 最近总有一个感觉:在不断学习中,越发的感觉自己的无知,自己是不是要从"愚昧之巅"掉到"绝望之谷"了,哈哈哈 邓宁-克鲁格效应 一.前言 前面的文章中已经 ...

  6. Java基础-成员变量与局部变量

    Java基础-成员变量与局部变量 1.什么是成员变量与局部变量? public class Student {   String name;   int high;   public void stu ...

  7. python psutila模块

    #!/usr/bin/env python #coding:utf-8 # qianxiao996精心制作 #博客地址:https://blog.csdn.net/qq_36374896 import ...

  8. Python GUI tkinter 学习笔记(二)

    第二个程序 # -*- coding: utf-8 -*- from Tkinter import * class App: def __init__(self, master): # frame 创 ...

  9. 仿真pda,部署时出现问题

    为什么部署到基于 Windows Mobile 的 Pocket PC 设备或模拟器会因共享冲突错误而失败 自己遇到了网上找到的解决方案http://hi.baidu.com/yeflower/blo ...

  10. Kubernetes:存储管理

    Blog:博客园 个人 参考:Volumes | Kubernetes.Persistent Volumes | Kubernetes.Kubernetes 基础入门实战 简单来说,存储卷是定义在Po ...