websocket简述

首先对当前链接方式进行简述
http:超文本传输协议,是网络应用层的协议,规定了网络数据传输的格式(数据行,数据头,数据体)。
http请求是一种单向发起的请求,只能由客户端主动请求服务器,服务器做出响应,一次请求完成之后,连接断开,服务端不能主动找到某个客户端。

socket:网络数据传输套接字,是一种数据传输技术(比http更偏底层),它规定了数据传输使用的协议(tcp,udp),以及数据的大小端。
socket是一种长连接技术,由客户端主动发起连接,连接服务端,然后连接一直保持,直到双方某一段主动断开。连接建立之后,服务端可以主动给客户端发送消息。

浏览器中不能直接使用socket技术,但是html5中新增了webSocket技术,它是对socket技术的封装,相比socket使用更简单方便。

// 页面
    
    



// 后台服务侧(Nodejs)

var WebSocket = require("ws");
var express = require("express");
var http = require("http");

var app = express();
app.use(express.static("www"));

var server = http.createServer(app);

//给数组添加一个删除内部某个元素的方法。
Array.prototype.delete = function(ele){
    this.splice(this.indexOf(ele),1);
}


//创建webScoket服务器,并指定关联的http服务器。
//创建出的wss对象就是socket服务器对象。
var wss = new WebSocket.Server({server:server});

//准备一个空数组,用于存放所有用户的连接对象。
var connections = [];


//connection事件,当有用户连接到本服务器时触发。
//事件函数有两个参数,第一个参数ws是连接对象,第二个参数req是建立连接的http请求。
wss.on("connection",function(ws,req){
    console.log("有一个用户连接我了");

    //服务端通过连接对象ws向客户端发送消息。调用ws的send方法。
    ws.send("欢迎来到本直播间");
    connections.push(ws);

    //当本连接对象的用户发送来消息的事件
    ws.on("message",function(msg){
        connections.forEach(w=>{
            try {
                w.send(msg);
            } catch (error) {
                console.log("一个用户意外断开连接了");
            }
        })
    });

    ws.on("close",function(){
        connections.delete(ws);
    });

    

});


server.listen(3000,function(){
    console.log("服务器已开启");
});

你可能感兴趣的:(websocket简述)