vue中利用websocket实现简易聊天室(一)

3,490 阅读2分钟

在Vue中利用websocket实现简单的聊天室效果(一)

在使用websocket之前先让我们了解一下websocket吧

WebSocket

如果说ajax像手机发短信一样,发送信息,获取信息,那么websocket技术则是打电话这样。WebSocket要达到的目的是让用户不需要刷新浏览器就可以获得实时更新。

image.png 使用ajax轮询会造成服务器的多重压,大量消耗服务器带宽和资源。面对这种情况,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并实现真正意义上的实时推送。

WebSocket协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。

特点:

  • 服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。这也是它最大的特点。
  • 建立在 TCP 协议之上,服务器端的实现比较容易。
  • HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
  • 数据格式比较轻重,性能开销小,通信高效。
  • 可以发送文本,也可以发送二进制数据。
  • 没有同源限制,客户端也可以与任意服务器通信。
  • 协议标识符是 ws (如果加密,则为wss),服务器网址就是 URL

image.png

WebSocket 事件

  1. Socket.onopen 连接建立时触发
  2. Socket.onmessage 客户端接收服务端数据时触发
  3. Socket.onerror 通信发生错误时触发
  4. Socket.onclose 连接关闭时触发

WebSocket 方法

  1. Socket.send() 使用连接发送数据
  2. Socket.close() 关闭连接

Nodejs + WebSocket 示例

安装WebSocket

npm i nodejs-websocket -S

新建一个index.js作为服务端

var ws = require("nodejs-websocket");
console.log("开始建立连接...")
var server = ws.createServer(function(conn){
 conn.on("text", function (str) {
 console.log("message:"+str)
 conn.sendText("My name is Web Xiu!");
 })
 conn.on("close", function (code, reason) {
 console.log("关闭连接")
 });
 conn.on("error", function (code, reason) {
 console.log("异常关闭")
 });
}).listen(8001)
console.log("WebSocket建立完毕")

客户端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button>连接</button>
</body>
</html>

<script>
    let btn = document.querySelector('button');
    btn.onclick = function(){
        if (window.WebSocket) {
            var ws = new WebSocket('ws://localhost:8001');
            ws.onopen = function (e) {
                console.log("连接服务器成功");
                // 向服务器发送消息
                ws.send("what`s your name?");
            }
            ws.onclose = function (e) {
                console.log("服务器关闭");
            }
            ws.onerror = function () {
                console.log("连接出错");
            }
            // 接收服务器的消息
            ws.onmessage = function (e) {
                let message = "message:" + e.data + "";
                console.log(message);
            }
        }
    }
</script>

image.png

文章借鉴:

www.toutiao.com/i6683747519…(# Nodejs + WebSocket简单介绍及示例 - 第一章)

www.ruanyifeng.com/blog/2017/0…(# WebSocket 教程)