一、前言

乐聊是一个自己用websocket写一个完整的应用,虽然功能比较欠缺,但是实现了基本的文字聊天,以及群聊,私聊,机器人聊天等功能。因为这个自己做了PC端,无线端(手机端),以及使用cordova打包成一个android的apk。实现了一个大前端的项目,虽然现在android端还是有点有问题,在修改bug。

二、websocket的原理介绍

1、为什么需要websocket?

因为 HTTP 协议有一个缺陷:通信只能由客户端发起。举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。

这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。

轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。

2、简介

websocket特点:服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

其他特点包括:

(1)建立在 TCP 协议之上,服务器端的实现比较容易。

(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。

(3)数据格式比较轻量,性能开销小,通信高效。

(4)可以发送文本,也可以发送二进制数据。

(5)没有同源限制,客户端可以与任意服务器通信。

(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

三、websocket.io使用

1、前端

在vue项目中,在index.html中

 <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
<script>// const socketWeb = io('http://localhost:3000');const socketWeb = io('http://chat.chengxinsong.cn');const userInfo = JSON.parse(sessionStorage.getItem("HappyChatUserInfo")) if (userInfo) { socketWeb.emit('update', userInfo.user_id); } </script>

2、后端

后端是使用koa作为后端

const app = new Koa();const server = require("http").createServer(app.callback()); const io = require("socket.io")(server);
io.on("connection", socket => {const socketId = socket.id;/*登录*/socket.on("login", async userId => { await socketModel.saveUserSocketId(userId, socketId); }); // 更新soketId socket.on("update", async userId => { await socketModel.saveUserSocketId(userId, socketId); }); //私聊 socket.on("sendPrivateMsg", async data => { const arr = await socketModel.getUserSocketId(data.to_user); const RowDataPacket = arr[0]; const socketid = JSON.parse(JSON.stringify(RowDataPacket)).socketid; io.to(socketid).emit("getPrivateMsg", data); }); // 群聊 socket.on("sendGroupMsg", async data => { io.sockets.emit("getGroupMsg", data); }); //加好友请求 socket.on("sendRequest", async data => { console.log("sendRequest", data); const arr = await socketModel.getUserSocketId(data.to_user); const RowDataPacket = arr[0]; const socketid = JSON.parse(JSON.stringify(RowDataPacket)).socketid; console.log('给谁的socketid',socketid) io.to(socketid).emit("getresponse", data); }); socket.on("disconnect", data => { console.log("disconnect", data); }); });

四、简介和功能

乐聊,一个快乐聊天的应用,支持PC端和无线端和安卓APP。

(1)PC端和无线端线上地址:http://chat.chengxinsong.cn

(2)下载安卓APP地址:暂时还有点小问题待解决,后边放出地址

版本v 1.0.0    - 1、支持注册用户和邮件激活用户;    - 2、支持登陆    - 3、支持机器人聊天;    - 4、支持加好友,一对一聊天;    - 5、支持创建群,加群,一对多聊天;    - 6、支持删除好友,退出群    - 7、支持个人信息编辑    - 8、支持添加好友备注    - 9、支持聊天中文字发送    - 10、支持浏览器:Chrome,Firefox,Safari,IE9及以上; 

+ 版本v 1.1.0    - 1、支持聊天中图片发送    - 2、支持聊天中表情发送    - 待续

五、运行截图

等等。。。

六、前后端源码

前端代码:https://github.com/saucxs/happy-chat-web

后端代码:https://github.com/saucxs/happy-chat-node

七、最后

欢迎fork和star,有问题提issue

转载于:https://www.cnblogs.com/chengxs/p/10681422.html

happyChat开发系列:使用websocket.io实现双向通信的乐聊大前端开发相关推荐

  1. 小型直播系统系列-乐聊TV的开发(四)

    小型直播系统系列-乐聊TV的开发(四) 这一节,我们讲解一下基于websocket的弹幕实现:首先了解一下websocket协议 websocket 们知道,传统的HTTP协议是无状态的,每次请求(r ...

  2. 小型直播系统系列-乐聊TV的开发(一)

    小型直播系统系列-乐聊TV的开发(一) 如今,直播洋溢在我们生活当中,随处可见的户外主播,如火如荼的游戏主播,耕耘播种的在线教育等等,如果我们想打造一个小型在线直播系统,在带宽支持的前提下,支持个几百 ...

  3. 小型直播系统系列-乐聊TV的开发(三)

    小型直播系统系列-乐聊TV的开发(三) 上一节我们讲到系统概括,这一节我们详细讲解一下spring-boot jpa的使用: spring-boot的使用 如今,随着微服务框架的发展,出现了诸如dub ...

  4. 小型直播系统系列-乐聊TV的开发(二)

    小型直播系统系列-乐聊TV的开发(二) 上一节我们讲到系统概括,这一节我们详细讲解一下nginx的使用: nginx-rtmp-module的使用 1.软件编译 从下面的网址分别下载nginx和ngi ...

  5. 【音视频开发系列】一学就会,快速掌握音视频开发的第一个开源项目FFmpeg

    快速掌握音视频开发的第一个开源项目:FFmpeg 1.为什么要学FFmpeg 2.FFmpeg面向对象思想分析 3.FFmpeg各种组件剖析 视频讲解如下,点击观看: [音视频开发系列]一学就会,快速 ...

  6. 大前端开发中的“树”

    本文介绍 Web.Android.iOS.Flutter 这些前终端平台下,与 "树" 及视图系统有关的技术话题,并尝试分析它们之间的异同点:方便从事大前端开发的同学对各平台的技术 ...

  7. 开发人员必须了解的 10 大前端开发工具

    全文 2960 字 阅读时间约 9 分钟 目录 第一类:常规前端开发工具 React​编辑 Angular​编辑 Flutter​编辑 Bootstrap​编辑 Vue.js​编辑 第二类:可视化开发 ...

  8. 敏捷开发系列之旅 第三站(认识FDD特征驱动开发)

    上篇文章中,我们探讨了什么是XP极限编程,以及极限编程的管理思想.核心价值观等等.在敏捷开发之旅的第三站,我想要和大家一起分享FDD特征驱动开发方法. 特征驱动开发--Feature Driven D ...

  9. 大前端开发 前端如何开发 APP

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 做为一个 ...

最新文章

  1. 使用C++的Socket实现从客户端到服务端,服务端到客户端传输文件
  2. java 中调用docker_如何通过Java程序执行docker命令
  3. php查找文件内元素,如何查看当前文档某个元素的子节点?有几种方法
  4. u-boot移植随笔:u-boot的内存分布图
  5. Java实验9 T3.对二进制数据文件中的所有数据求和
  6. oracle触发器(转载收集)
  7. 关于服务限流的一些思考
  8. vue项目多主题风格切换(适配暗黑模式)
  9. 实现在线预览word文档
  10. python-声音录制和处理
  11. WPF实现无线扫码枪无焦点自动获取数据并逻辑处理
  12. 湖北自考 计算机网络,2021年湖北自考计算机网络基础课程考试大纲
  13. ubuntu双系统修改启动菜单
  14. 极虎病毒创造的四个最
  15. 开学了,献给就读IT相关专业的本科新生们
  16. ivms虚拟服务器,ivms监控服务器地址
  17. 【杰神说说】物联大师2.0版本预告
  18. 5G/NR 上行免授权
  19. 吉林大学考研计算机科学与技术,2022年吉林大学计算机科学与技术学院考研初试科目调整通知...
  20. 把图片转换成二进制--把二进制转换成图片

热门文章

  1. android 驾照题库接口,驾考题库API接口_免费数据接口 - 极速数据
  2. redis远程调用实习笔记
  3. 5项人工智能实例,令人惊叹
  4. 免费文字转语音软件有哪些?这几款宝藏工具你值得拥有
  5. 生意参谋数据data,拼多多加密系列参数(anti-content,crawlerInfo),唯品会加密参数compassS破解
  6. Css3飞机动画特效
  7. 索尼微单cmos坏点屏蔽
  8. 我常用的15个数据源网站!
  9. 为什么计算机的性能和价格千差万别,电脑性能怎么看_怎么看电脑配置好坏 从参数中看...
  10. 阿里云 幸运券领取 地址,为自己以后用,也为小伙伴们提供福利