1、前言javascript
乐聊是一个本身用websocket写一个完整的应用,虽然功能比较欠缺,可是实现了基本的文字聊天,以及群聊,私聊,机器人聊天等功能。由于这个本身作了PC端,无线端(手机端),以及使用cordova打包成一个android的apk。实现了一个大前端的项目,虽然如今android端仍是有点有问题,在修改bug。html
2、websocket的原理介绍前端
一、为何须要websocket?vue
由于 HTTP 协议有一个缺陷:通讯只能由客户端发起。举例来讲,咱们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议作不到服务器主动向客户端推送信息。java
这种单向请求的特色,注定了若是服务器有连续的状态变化,客户端要获知就很是麻烦。咱们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。node
轮询的效率低,很是浪费资源(由于必须不停链接,或者 HTTP 链接始终打开)。android
二、简介git
websocket特色:服务器能够主动向客户端推送信息,客户端也能够主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。github
其余特色包括:web
(1)创建在 TCP 协议之上,服务器端的实现比较容易。
(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,而且握手阶段采用 HTTP 协议,所以握手时不容易屏蔽,能经过各类 HTTP 代理服务器。
(3)数据格式比较轻量,性能开销小,通讯高效。
(4)能够发送文本,也能够发送二进制数据。
(5)没有同源限制,客户端能够与任意服务器通讯。
(6)协议标识符是ws(若是加密,则为wss),服务器网址就是 URL。
3、websocket.io使用
一、前端
在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>
二、后端
后端是使用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); }); });
4、简介和功能
乐聊,一个快乐聊天的应用,支持PC端和无线端和安卓APP。
(1)PC端和无线端线上地址:http://chat.chengxinsong.cn
(2)下载安卓APP地址:暂时还有点小问题待解决,后边放出地址
版本v 1.0.0
- 一、支持注册用户和邮件激活用户;
- 二、支持登录
- 三、支持机器人聊天;
- 四、支持加好友,一对一聊天;
- 五、支持建立群,加群,一对多聊天;
- 六、支持删除好友,退出群
- 七、支持我的信息编辑
- 八、支持添加好友备注
- 九、支持聊天中文字发送
- 十、支持浏览器:Chrome,Firefox,Safari,IE9及以上;
+ 版本v 1.1.0
- 一、支持聊天中图片发送
- 二、支持聊天中表情发送
- 待续
5、运行截图
等等。。。
6、先后端源码
前端代码:https://github.com/saucxs/happy-chat-web
后端代码:https://github.com/saucxs/happy-chat-node
7、最后
欢迎fork和star,有问题提issue