koa socket即时通讯的示例代码


Posted in Javascript onSeptember 07, 2018

前言

http的特点是一问一答,而即时通讯是需要双向通信的,这样以前的即时通信只能使用轮询的方式通过周期性的ajax请求获取数据,直到websocket出现,就完美实现了双向通信

一 即时通讯方式简介

段轮询

前台使用setInterval进行定时请求后台,这样无疑非常浪费性能

长轮询和长连接(html5的EventSource)

客服端连接一次,服务端不断开连接,服务端接收到新消息就发送给前台,客服端和服务端保持一直连接,缺点是只有服务端向客服端输出

websocket

websocket不再是走http协议,而是升级为websocket协议,说到底就是走应用层协议(tcp),实现双向通信,缺点是兼容性问题(ie11)

socket.io

上面的方式都存在一定问题,自然就有人封装一套完美的解决方案,socket.io就是集合了上面几种方案的另一种解决方案

二 即时通信实现

客服端

引入包:<script src="https://cdn.socket.io/socket.io-1.2.1.js";></script>

服务端和客服端通过on和emit进行交互

  1. emit表示发送,事件名自定义,另一端用on进行接收
  2. on表示接受,类似jq绑定事件,事件名对应emit事件名
  3. connect,disconnect是连接和断开事件
// 建立连接
 var socket= io('http://localhost:80')
 // on表示接收
 // emit表示发送
 socket.on('connect', function () {
 console.log('连接上了')
 // 登录,同步前后端信息
 // 请求后端login接口,写入socketid
 socket.emit('login', {
  // 身份标识,可以是时间戳或者唯一id,最要用来回去socketid进行私聊
  id: username
 })
 })


 // 发送消息,这里可以用发送事件进行消息发送
 socket.emit('sendMsg', {
 newAccount: 'xxxxxx'
 })
 
 // 接收消息
 socket.on('msg1', function (data) {
 // 可以对数据进行渲染
 console.log(data)
 
 })
 socket.on('allmessage', function (data) {
 // 接收所有人消息
 console.log(data);

 })
 
 // 表示连接断开了
 socket.on('disconnect', function () {
 console.log('聊天服务器断开了')
 })

服务端(koa+koa-socket)

安装koa-socket

npm i koa2 koa-socket -S
const IO = require('koa-socket')
 const Koa = require('koa2')
 const io = new IO()
 
 const app = new Koa()
 
 // 将socket和app关联
 io.attach(app)
 // 和客服端进行连接
 io.on('connection', (context) => {
 console.log('连接上了')
 })
 // 接收消息
 io.on('sendMsg', function (context) {
 //console.log(context.data)
 // 向客服端实时发送消息
 io.broadcast('msg1', '我是服务器来的')

 // 广播,所有人消息
 io.broadcast('allmessage', context.data.newAccount)
 })

 // 处理登陆同步信息
 io.on('login', context => {
 let id = context.data.id;
 console.log(context);
 });

总结

上面就是koa-socket使用的简单介绍,只实现了简单的消息推送和接收,后面还有私聊和群发,其原理是获取到每个用户的socketid,发送消息时对应发送,后面再进行更新

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery代码优化之基本事件
Nov 01 Javascript
微信企业号开发之微信考勤百度地图定位
Sep 11 Javascript
浅析JavaScript 箭头函数 generator Date JSON
May 23 Javascript
值得分享的Bootstrap Table使用教程
Nov 23 Javascript
原生js实现弹出层登录拖拽功能
Dec 05 Javascript
前端图片懒加载(lazyload)的实现方法(提高用户体验)
Aug 21 Javascript
JQuery 又谈ajax局部刷新
Nov 27 jQuery
微信小程序学习笔记之函数定义、页面渲染图文详解
Mar 28 Javascript
vue如何截取字符串
May 06 Javascript
js实现一个简易计算器
Mar 30 Javascript
浅入深出Vue之自动化路由
Aug 06 Javascript
jQuery实现推拉门效果
Oct 19 jQuery
vue侧边栏动态生成下级菜单的方法
Sep 07 #Javascript
Vuejs开发环境搭建及热更新【推荐】
Sep 07 #Javascript
小程序点赞收藏功能的实现代码示例
Sep 07 #Javascript
前端防止用户重复提交js实现代码示例
Sep 07 #Javascript
vue实现打印功能的两种方法
Sep 07 #Javascript
使用Angular-CLI构建NPM包的方法
Sep 07 #Javascript
详解如何构建一个Angular6的第三方npm包
Sep 07 #Javascript
You might like
php实现邮件发送并带有附件
2014/01/24 PHP
PHP批量检测并去除文件BOM头代码实例
2014/05/08 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
2015/05/12 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
javascript中如何处理引号编码&amp;#034;
2013/08/15 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
举例讲解jQuery中可见性过滤选择器的使用
2016/04/18 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
Vue管理系统前端之组件拆分封装详解
2020/08/23 Javascript
原生js实现拖拽移动与缩放效果
2020/08/24 Javascript
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
Python实现的简单模板引擎功能示例
2017/09/02 Python
django 修改server端口号的方法
2018/05/14 Python
详解python之heapq模块及排序操作
2019/04/04 Python
Python实现中值滤波去噪方式
2019/12/18 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
欢迎领导检查标语
2014/06/27 职场文书
质量保证书怎么写
2015/02/27 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
python3实现常见的排序算法(示例代码)
2021/07/04 Python