时时当勉励,岁月不待人。珍惜时间伐~

先看看项目运行的效果



这个是在本地环境打开了两个8080端口进行模拟运行的。

先放下作者的开源地址:https://github.com/ceshu/ceshuChat

这个项目要首先运行服务端,服务端是基于node.js的socket.io,大多数实时聊天系统通常基于 socket 来构建的。

服务器端的代码为

package.json中只有socket.io一个插件

{
"dependencies": {
"socket.io": "^1.7.1"
}
}

在index.js引入socket.io连接客户端

代码为

//app.js
var io = require('socket.io').listen(3000)
io.on('connection', function (socket) {
console.log("客户端连接成功!")
socket.on('send', function (data) {
socket.broadcast.emit('receive', { "user": socket.id, "data": data })
})
})

接下来我们来看客户端的代码

在vue+socket实现消息推送,后台已设定好socket消息,首先在vue项目中引入socket。在npm下载socket。

npm install vue-socket.io

客户端的index.html中引入socket.io.js

<!DOCTYPE html>
<html> <head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<title>ceshuChat客户端</title>
</head>
<script src="http://localhost:3000/socket.io/socket.io.js"></script> <body>
<div id="app"></div>
</body> </html>

接下来看main.js的代码

main.js在入口中都引入了socket,以及Framework7Vue

//main.js
import Vue from 'vue'
import VueSocketio from 'vue-socket.io'
import Framework7 from 'framework7'
import Framework7Vue from 'framework7-vue'
import Framework7Theme from 'framework7/dist/css/framework7.ios.min.css'
import Framework7ThemeColors from 'framework7/dist/css/framework7.ios.colors.min.css'
import AppStyles from './css/app.css'
import Routes from './routes.js'
import App from './app'
Vue.use(VueSocketio, 'http://localhost:3000')
Vue.use(Framework7Vue) new Vue({
el: '#app',
template: '<app/>',
framework7: {
root: '#app',
routes: Routes,
},
components: {
app: App
}
});

看App.vue入口文件

<template>
<div id="app">
<f7-statusbar></f7-statusbar>
<f7-views>
<f7-view id="main-view" navbar-through :dynamic-navbar="true" main>
<f7-navbar v-if="$theme.ios">
<f7-nav-center sliding>ceshuChat客户端</f7-nav-center>
</f7-nav-right>
</f7-navbar>
<f7-pages>
<f7-page> <f7-messages>
<f7-message v-for="message in messages" :text="message.text" :date="message.date" :name="message.name" :avatar="message.avatar" :type="message.type" :day="message.day" :time="message.time">
</f7-message>
</f7-messages>
<f7-messagebar placeholder="请输入..." send-link="发送" @submit="onSubmit"></f7-messagebar> </f7-page>
</f7-pages>
</f7-view>
</f7-views> </div>
</template> <script>
export default {
data: function() {
return {
messages: []
}
},
sockets: {
connect: function() {},
customEmit: function(val) {}
},
created() {
this.$options.sockets.receive = (content) => {
this.messages.push({
name: content.user,
avatar:content.data.avatar,
text: content.data.text,
date: content.data.sendDate,
type: 'received',
})
}
},
methods: {
onSubmit: function(text, clear) {
if(text.trim().length === 0) return
let sendDate = (function() {
let now = new Date();
let hours = now.getHours();
let minutes = now.getMinutes()
let seconds = now.getSeconds();
return hours + ':' + minutes + ':' + seconds
})()
let avatar = require('./img/avatar.png')
let sendEmit = {
"text": text,
"avatar": avatar,
"sendDate": sendDate,
}
this.$socket.emit('send', sendEmit)
this.messages.push({
avatar: avatar,
text: text,
date: sendDate
})
clear()
}
}
}
</script>
<style> </style>

先UI效果

这个效果的实现还挺有意思的。

【daydayup】ceshuChat的更多相关文章

  1. 【daydayup】weTalk

    先看一下项目效果 这个是我运行的作者的项目的wetalk-server项目,他还有wetalk-client 项目 先放下作者的github项目地址:https://github.com/mangyu ...

  2. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  3. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  4. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  5. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  6. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  7. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  8. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

  9. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

随机推荐

  1. 微信-小程序-开发文档-服务端-模板消息:templateMessage.getTemplateLibraryList

    ylbtech-微信-小程序-开发文档-服务端-模板消息:templateMessage.getTemplateLibraryList 1.返回顶部 1. templateMessage.getTem ...

  2. eclispe 创建maven 项目:Could not resolve archetype org.apache.maven.archetypes

    昨天新装eclispe 后,创建maven工程后出现 Could not resolve archetype org.apache.maven.archetypes:maven-archetype-q ...

  3. nutch二次开发环境搭建

    开发环境: ubuntu14.04 + jdk1.7 + eclispe +nutch1.7 1:解压下好nutch1.7 src 源码(wget http://archive.apache.org/ ...

  4. Spring源码分析(一):从哪里开始看spring源码(系列文章基于Spring5.0)

    概述 对于大多数第一次看spring源码的人来说,都会感觉不知从哪开始看起,因为spring项目源码由多个子项目组成,如spring-beans,spring-context,spring-core, ...

  5. Window下,前后端分离项目,登录权限验证中的,Redis相关操作

    [1]官网下载Redis(解压版) https://redis.io/download [2]切换到目录下打开DOS,执行指令启动Redis redis-server.exe redis.window ...

  6. vue中解决拖动和点击事件的冲突

    BUG说明: 鼠标上下方向拖拽,如果松开时鼠标位于悬浮按钮上会默认执行click事件,经验证,click事件与mouse事件的执行顺序为onmousedown =>onmouseup => ...

  7. SQL Server实现跨库查询(跨库select insert)

    方法一: select  * from servername.dbo.tablename 方法二: select * from OPENDATASOURCE(         'SQLOLEDB',  ...

  8. Ajax.BeginForm 在 Chrome下的问题

    项目背景:MVC4 代码: @using (Ajax.BeginForm("Index", "GoingMeter", new AjaxOptions { On ...

  9. Mysql优化-索引

    1. 索引的本质 MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构. 数据库查询是数据库的最主要功能之一.我们都希望查询数据的速度尽可能的快,因此 数据库系统的设计者会从查询算 ...

  10. 【学术篇】SDOI2008 仪仗队

    Part1:传送门&吐槽 水题... 然而由于线筛里面的\(j\)打成了\(i\)然后就不能1A了OvO Part2:题目分析 这个正方形是对称的... 而且很显然对角线上只有一个点会被看到. ...