软件工程课程汇报

编程入门 行业动态 更新时间:2024-10-23 20:21:21

<a href=https://www.elefans.com/category/jswz/34/1769414.html style=软件工程课程汇报"/>

软件工程课程汇报

文章目录

    • 汇报主题
    • 收集目标
    • 具体内容
      •   WS介绍
      •   Socket(套接字)是什么
      •   WebSocket是什么
      •   websocket 建立连接及数据传送
        •   建立连接
        •   数据传送
      •   websocket的创建和常用的属性方法
          •   创建对象
          •   WebSocket 属性
          •   WebSocket 事件
          •   WebSocket 方法
          •   示例(JS)

汇报主题

服务端如何感知用户端的存在

收集目标

用 WS 协议建立服务器端与用户端的通信,心跳机制是内部实现要点

具体内容

  WS介绍

HTTP 协议有一个缺陷:通信只能由客户端发起。

WS 协议,即 WebSocket 协议, 是 H5 下一种新的协议,它诞生于 2008 年,2011 年成为国际标准,现在所有浏览器都已支持。

它实现了浏览器与服务器全双工通信(双方可同时向对方发送消息),能更好的节省服务器资源和带宽,并达到实时通讯的目的,

最大特点是:服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术。


  Socket(套接字)是什么

网络层的 “IP地址” 可以唯一标识网络中的主机,而传输层的 “协议+端口” 可以唯一标识主机中的应用程序(进程)

网络中的两个应用程序(进程)进行全双工相互通信,需要用到应用编程接口 socket ,它能够提供端对端通信

简单来说,Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口

对程序员而言,建立一个端对端的 TCP 连接(即计网中的三次握手):

  • 在客户端创建一个 socket 实例并且提供服务端的 IP 地址和端口
  • 服务端创建另一个 socket 实例并绑定本地端口进行监听
  • 然后客户端进行连接服务端
  • 服务端接受连接

一旦建立这个连接之后,通信双方就没有客户端服务端之分了,提供的就是端对端通信


  WebSocket是什么

WebSocket 借鉴了Socket 的思想,为web应用程序客户端和服务端之间提供了一种全双工通信机制,是一种新的应用层协议

通常它表示为:

ws://echo.websocket/?encoding=text HTTP/1.1

除了前面的协议名和 http 不同之外,它的表示地址就是传统的 url 地址。

但实质上跟 HTTP 协议基本没有关系,只是为了兼容现有浏览器的握手规范而已

websocket 具有以下几个方面的优势:

  • 建立在 TCP 协议之上,服务器端的实现比较容易

  • 与 HTTP 协议有着良好的兼容性。默认端口也是 80 和 443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器

  • 数据格式比较轻量,性能开销小,通信高效

  • 可以发送文本,也可以发送二进制数据

  • 没有同源限制,客户端可以与任意服务器通信

  • 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL


  websocket 建立连接及数据传送

  建立连接

(1)在客户端构建一个websocket实例,并且为它绑定一个需要连接到的服务器地址,向服务端发送一个类似下面的http报文

(2)服务器返回报文,表示接受请求,成功建立 WebSocket 连接

返回的状态码为101,表示同意客户端协议转换请求,并将它转换为websocket协议。

以上过程都是复用HTTP通道完成的,经过这握手之后,客户端和服务端就建立了 websocket 连接,以后的通信走的都是websocket协议了

一旦建立连接之后,就可以进行数据传输了,websocket提供两种数据传输:文本数据和二进制数据


  数据传送

WebSocket客户端-服务端通信的最小单位是帧(frame),由1个或多个帧组成一条完整的消息(message)。

详情如下:

  • 发送端:将消息切割成多个帧,并发送给服务端;

  • 接收端:接收消息帧,并将关联的帧重新组装成完整的消息。

  websocket的创建和常用的属性方法

  创建对象

​ 以下 API 用于创建 WebSocket 对象:

var Socket = new WebSocket(url, [protocol] );
# url:指定连接的 URL
# protocol:可选,指定可接受的子协议

  WebSocket 属性
属性描述
Socket.readyState只读属性 readyState 表示连接状态,可以是以下值:
0 - 表示连接尚未建立
1 - 表示连接已建立,可以进行通信
2 - 表示连接正在进行关闭
3 - 表示连接已经关闭或者连接不能打开
CONNECTING值为0,表示正在连接。
OPEN值为1,表示连接成功,可以通信了
CLOSING值为2,表示连接正在关闭
CLOSED值为3,表示连接已经关闭,或者打开连接失败
Socket.bufferedAmount只读属性 bufferedAmount表示已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数。

  WebSocket 事件
事件事件处理程序描述
openSocket.onopen连接建立时触发
messageSocket.onmessage客户端接收服务端数据时触发
errorSocket.onerror通信发生错误时触发

  WebSocket 方法
方法描述
Socket.send()使用连接发送数据
Socket.close()关闭连接

  示例(JS)
  var webSocket = new WebSocket(url);if(webSocket.readyState == webSocket.CONNECTING){console.log('连接正在打开');}//连接打开时触发webSocket.onopen = function () {webSocket.send(consumerId);//可以看到 "连接正在打开"并没有被打印,说明open对应的就是OPEN状态;if(webSocket.readyState == webSocket.CONNECTING){console.log('连接正在打开1');}if(webSocket.readyState == webSocket.OPEN){console.log('连接已打开');}sendMsg();window.weui.alert('已经建立连接');};//连接关闭时触发webSocket.onclose = function () {if(webSocket.readyState == webSocket.CLOSED){console.log('连接已关闭')}window.weui.alert('连接已断开');};//连接出错时触发webSocket.onerror = function () {window.weui.alert('连接错误,请稍后再试');};== webSocket.CLOSED){console.log('连接已关闭')}window.weui.alert('连接已断开');};//连接出错时触发webSocket.onerror = function () {window.weui.alert('连接错误,请稍后再试');};

更多推荐

软件工程课程汇报

本文发布于:2024-03-11 16:17:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1729371.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:软件工程   课程

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!