本文介绍: HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用请求/响应模型通信请求只能由客户端发起,服务端请求做出应答处理,HTTP 协议无法实现服务器主动向客户端发起消息。这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。大多数 Web 应用程序通过频繁的异步JavaScript 和 XML(AJAX)请求实现轮询轮询效率低,非常浪费资源。Websocket应运而生,WebSocket 连接允许客户端服务器之间进行全双工通信。………

 

目录

1. websocket 介绍

 2.  客户端(浏览器)实现

 3.  服务器端实现

  4.  socket.io 模块


1. websocket 介绍

HTTP 协议是一种无状态的、无连接的、单向应用层协议。它采用请求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理,HTTP 协议无法实现服务器主动向客户端发起消息

这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。大多数 Web 应用程序通过频繁的异步 JavaScript 和 XML(AJAX)请求实现轮询轮询的效率低,非常浪费资源

Websocket应运而生,WebSocket 连接允许客户端和服务之间进行全双工通信以便任一方都可以通过建立的连接将数据推送到另一端。WebSocket需要建立一次连接,就可以一直保持连接状态,双向实时通信。这相比于轮询方式的不停建立连接显然效率要大大提高

 2.  客户端(浏览器实现

  1. 通过以下方式,在浏览器创建 WebSocket 对象
  2. 参数 url 格式说明ws://ip地址端口号/资源名称
const ws = new WebSocket(url)  
事件 事件处理程序 描述
open WebSocket 对象.onopen 连接建立时触发
message WebSocket 对象.onmessage 客户接收服务端数据触发
error WebSocket 对象.onerror 通信发生错误触发
close WebSocket 对象.onclose 连接关闭时触发
方法 描述
WebSocket 对象.send() 服务器发送数据
<script/&gt;
var sock = new WebSocket("ws://127.0.0.1:8080");
sock.on("open", function () {
    console.log("connect success !!!!")
})

sock.on("error", function (err) {
    console.log("error: ", err)
})

sock.on("close", function () {
    console.log("close")
});

sock.on("message", function (data) {
    console.log(data)
})

sock.send(JSON.stringify(values))
</script&gt;

 3.  服务器端实现

npm install websocket

创建WebSocket服务器对象语法格式new WebSocket.Server(options[, callback])

事件 描述
close 服务器关闭时被触发
connection 成功握手连接时触发
error 发生错误时被触发,可注入一个Error对象
headers 握手前被触发,允许在发送HTTP头之前检查修改标题
listening 绑定端口时被触发
//1、安装ws模块 npm install ws
//2、导入ws模块
const WebSocket=require('ws');
//3、创建WebSocket服务器
const server=new WebSocket.Server({port:8080});
//4、监听open事件
server.on('open',()=&gt;{
    console.log('建立连接');
})
//5、绑定close事件
server.on('close',()=&gt;{
    console.log('关闭连接')
})
//6、绑定connection事件 ws参数表示客户req表示客户端的请求信息
server.on('connection',(ws,req)=&gt;{
    //6.1获取客户端的ip port
    const ip=req.connection.remoteAddress;
    const port=req.connection.remotePort;
    const clientName=ip+port;
    console.log('%s is connect',clientName);
    //6.2向客户发送消息
    ws.send('欢迎'+clientName);
    //监听 客户message 事件,转发给其他人
    ws.on('message',(msg)=&gt;{
        console.log('消息:%s 来自于 %s',msg,clientName);
        //6.3把消息广播所有客户端:clients表示所有客户端
        server.clients.forEach(function (client) {
            //若某个客户端是打开的,就把消息广播给该客户
            if (client.readyState===WebSocket.OPEN){
                client.send(clientName+'---------'+msg);
            }
        })
    })
})

  4.  socket.io 模块

Socket.IO一个WebSocket 模块,包括了客户端的js服务器端nodejs,它的目标构建可以不同浏览器移动设备使用的实时应用,有以下特点:

教程socket.io 服务端API_w3cschool

案例Node.js基础8-用Socket.IO做聊天软件_鹏程933的博客-CSDN博客

原文地址:https://blog.csdn.net/niuroufen5/article/details/126327964

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_44990.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注