美文网首页
websocket学习

websocket学习

作者: 天问ing | 来源:发表于2019-01-10 15:53 被阅读0次

websocket的定义

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

websocket的优势:

  1. 较少的控制开销。
  2. 更强的实时性。由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少;即使是和Comet等类似的长轮询比较,其也能在短时间内更多次地传递数据。
  3. 保持连接状态。与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。
    更好的二进制支持。Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。
  4. 可以支持扩展。Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览器支持压缩等。
  5. 更好的压缩效果。相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率。

使用socket.io实现简单的聊天室

  1. 前端代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>websocket聊天室</title>
    <style>
        #content{
            width: 600px;
            height: 300px;
            border: 1px solid black;
        }
        .me{
            color: green;
        }
    </style>
    <script src="http://localhost:8080/socket.io/socket.io.js"></script>
    <script>
        let sock = io.connect("ws://localhost:8080");
        sock.on("connect",()=>{
            console.log("连接建立");
        })
        sock.on("disconnect",()=>{
            console.log("连接断开");
        })
        window.onload = function(){
            let ul = document.querySelector("#content");
            let msg = document.querySelector("#msg");
            let btn = document.querySelector("#btn");
            
            sock.on("msg",function(str){
                let li = document.createElement("li");
                li.innerHTML = str;
                ul.appendChild(li);
            })

            btn.onclick = function(){
                let sendMsg = msg.value.replace(/(^\s+)|(\s+$)/g,"");
                if(sendMsg.length !== 0){
                    sock.emit("msg",sendMsg);
                    let li = document.createElement("li");
                    li.innerHTML= sendMsg;
                    li.className = "me";
                    ul.appendChild(li);
                    msg.value = "";
                }
            }
        }
    </script>
</head>
<body>
    <ul id="content"></ul>
    <textarea id="msg" cols="80" rows="10"></textarea>
    <input type="submit" value="发送" id="btn">
</body>
</html>
  1. nodejs服务器端的代码
const http = require("http");
const io = require("socket.io");

let httpServer = http.createServer();
httpServer.listen(8080);

let wsServer = io.listen(httpServer);
let sockArr = [];
wsServer.on("connection",sock=>{
    sockArr.push(sock);
    sock.on("disconnect",()=>{
        let n = sockArr.indexOf(sock);
        if(n!=-1){
            sockArr.splice(n,1);
        }
    })
    sock.on("msg",function(str){
        sockArr.forEach(s=>{
            if(s!=sock){
                s.emit("msg",str);
            }
        })
    })
    setInterval(() => {
        console.log(sockArr.length)
    }, 1000);
})

相关文章

  • swoole之websocket之协程版和回调版

    项目要用到消息提醒功能,因此借此机会学习websocket 回调版本websocket 协程版本websocket

  • WebSocket学习

    WebSocket学习 为什么需要WebSocket 以往使用的HTTP协议存在一个缺陷,通信只能由客户端发起。 ...

  • websocket学习

    一、websocket与http WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或...

  • WebSocket学习

    1.pom 核心是@ServerEndPoint注解 使用SpringBoot项目时SpringWebSocket...

  • 学习websocket

    一、什么是websocket websocket是一种网络通信协议。 由于http协议只能由客户端来发起请求,这个...

  • WebSocket学习

    参考网上的各种资源而写。 WebSocket一种在单个 TCP 连接上进行全双工通讯的协议。 WebSocket ...

  • websocket学习

    WebSocket简介 谈到Web实时推送,就不得不说WebSocket。在WebSocket出现之前,很多网站为...

  • websocket学习

    websocket的定义 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协...

  • WebSocket 学习(一)认识websocket

    一:背景介绍 近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展...

  • WebSocket 学习(二)node + WebSocket

    一. 环境准备 安装node,安装地址:https://nodejs.org/en/ 安装nodejs-webso...

网友评论

      本文标题:websocket学习

      本文链接:https://www.haomeiwen.com/subject/pfuarqtx.html