Websocket(一)——原理及基本属性和方法

2023-11-14

初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?

答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。

举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。

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

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

一.传统的实现即时通信的方式

ajax轮询

ajax轮询的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。

场景再现:

客户端:啦啦啦,有没有新信息(Request)

服务端:没有(Response)

客户端:啦啦啦,有没有新信息(Request)

服务端:没有。。(Response)

客户端:啦啦啦,有没有新信息(Request)

服务端:你好烦啊,没有啊。。(Response)

客户端:啦啦啦,有没有新消息(Request)

服务端:好啦好啦,有啦给你。(Response)

客户端:啦啦啦,有没有新消息(Request)

服务端:。。。。。没。。。。没。。。没有(Response) —- loop

long poll

long poll 其实原理跟 ajax轮询 差不多,都是采用轮询的方式,不过采取的是阻塞模型(一直打电话,没收到就不挂电话),也就是说,客户端发起连接后,如果没消息,就一直不返回Response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。

场景再现:

客户端:啦啦啦,有没有新信息,没有的话就等有了才返回给我吧(Request)

服务端:额。。 等待到有消息的时候。。来 给你(Response)

客户端:啦啦啦,有没有新信息,没有的话就等有了才返回给我吧(Request) -loop

从上面可以看出其实这两种方式,都是在不断地建立HTTP连接,然后等待服务端处理,可以体现HTTP协议的另外一个特点,被动性。

何为被动性呢,其实就是,服务端不能主动联系客户端,只能有客户端发起。

 

小姐:

ajax轮询 需要服务器有很快的处理速度和资源。(速度)
long poll 需要有很高的并发,也就是说同时接待客户的能力。(场地大小)

长连接

在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求或是采用xhr请求,服务器端就能源源不断地往客户端输入数据。
优点:消息即时到达,不发无用请求;管理起来也相对方便。
缺点:服务器维护一个长连接会增加开销,当客户端越来越多的时候,server压力大!
实例:Gmail聊天

 

 (1).基于http协议的长连接

         在HTTP1.0和HTTP1.1协议中都有对长连接的支持。其中HTTP1.0需要在request中增加”Connection: keep-alive“ header才能够支持,而HTTP1.1默认支持.

      http1.0请求与服务端的交互过程:

      a)客户端发出带有包含一个header:”Connection: keep-alive“的请求

      b)服务端接收到这个请求后,根据http1.0和”Connection: keep-alive“判断出这是一个长连接,就会在response的header中也增加”Connection: keep-alive“,同是不会关闭已建立的tcp连接.

      c)客户端收到服务端的response后,发现其中包含”Connection: keep-alive“,就认为是一个长连接,不关闭这个连接。并用该连接再发送request.转到a)

    (2).http1.1请求与服务端的交互过程:

 

    a)客户端发出http1.1的请求

    b)服务端收到http1.1后就认为这是一个长连接,会在返回的response设置Connection: keep-alive,同是不会关闭已建立的连接.

    c)客户端收到服务端的response后,发现其中包含”Connection: keep-alive“,就认为是一个长连接,不关闭这个连接。并用该连接再发送request.转到a)

     基于http协议的长连接减少了请求,减少了建立连接的时间,但是每次交互都是由客户端发起的,客户端发送消息,服务端才能返回客户端消息.因为客户端也不知道服务端什么时候会把结果准备好,所以客户端的很多请求是多余的,仅是维持一个心跳,浪费了带宽.

 

Flash Socket

在页面中内嵌入一个使用了Socket类的 Flash 程序JavaScript通过调用此Flash程序提供的Socket接口与服务器端的Socket接口进行通信,JavaScript在收到服务器端传送的信息后控制页面的显示。
优点:实现真正的即时通信,而不是伪即时。
缺点:客户端必须安装Flash插件,移动端支持不好,IOS系统中没有flash的存在;非HTTP协议,无法自动穿越防火墙。
实例:网络互动游戏。

 

二.websocket的方式实现服务端消息推送

 

1.什么是socket?什么是websocket?两者有什么区别?websocket是仅仅将socket的概念移植到浏览器中的实现吗?

 

  我们知道,在网络中的两个应用程序(进程)需要全双工相互通信(全双工即双方可同时向对方发送消息),需要用到的就是socket,它能够提供端对端通信,对于程序员来讲,他只需要在某个应用程序的一端(暂且称之为客户端)创建一个socket实例并且提供它所要连接一端(暂且称之为服务端)的IP地址和端口,而另外一端(服务端)创建另一个socket并绑定本地端口进行监听,然后客户端进行连接服务端,服务端接受连接之后双方建立了一个端对端的TCP连接,在该连接上就可以双向通讯了,而且一旦建立这个连接之后,通信双方就没有客户端服务端之分了,提供的就是端对端通信了。我们可以采取这种方式构建一个桌面版的im程序,让不同主机上的用户发送消息。从本质上来说,socket并不是一个新的协议,它只是为了便于程序员进行网络编程而对tcp/ip协议族通信机制的一种封装。

 

socket传送门:http://blog.csdn.net/luokehua789789/article/details/54378264

websocket是html5规范中的一个部分,它借鉴了socket这种思想,为web应用程序客户端和服务端之间(注意是客户端服务端)提供了一种全双工通信机制。同时,它又是一种新的应用层协议,websocket协议是为了提供web应用程序和服务端全双工通信而专门制定的一种应用层协议,通常它表示为:ws://echo.websocket.org/?encoding=text HTTP/1.1,可以看到除了前面的协议名和http不同之外,它的表示地址就是传统的url地址。

Websocket其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种补充可以通过这样一张图理解

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

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

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

(3)数据格式比较轻量,性能开销小,通信高效。

(4)可以发送文本,也可以发送二进制数据。

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

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

 

 

2.websocket的通信原理和机制

既然是基于浏览器端的web技术,那么它的通信肯定少不了http,websocket本身虽然也是一种新的应用层协议,但是它也不能够脱离http而单独存在。具体来讲,我们在客户端构建一个websocket实例,并且为它绑定一个需要连接到的服务器地址,当客户端连接服务端的时候,会向服务端发送一个类似下面的http报文

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
 
Upgrade: websocket
Connection: Upgrade

 

 

这个就是Websocket的核心了,告诉Apache、Nginx等服务器:发起的是websocket协议。

 

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

 

 

 

首先,Sec-WebSocket-Key  是一个Base64 encode的值,这个是浏览器随机生成的,告诉服务器:泥煤,不要忽悠窝,我要验证尼是不是真的是Websocket助理。
然后,Sec_WebSocket-Protocol  是一个用户定义的字符串,用来区分同URL下,不同的服务所需要的协议。简单理解:今晚我要服务A,别搞错啦~
最后,Sec-WebSocket-Version 是告诉服务器所使用的Websocket Draft(协议版本),在最初的时候,Websocket协议还在 Draft 阶段,各种奇奇怪怪的协议都有,而且还有很多期奇奇怪怪不同的东西,什么Firefox和Chrome用的不是一个版本之类的,当初Websocket协议太多可是一个大难题。。不过现在还好,已经定下来啦~大家都使用的一个东西~ 脱水:服务员,我要的是13岁的噢→_→

然后服务器会返回下列东西,表示已经接受到请求, 成功建立Websocket啦!

 

 

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

 

 

 

 

依然是固定的,告诉客户端即将升级的是Websocket协议,而不是mozillasocket,lurnarsocket或者shitsocket。
然后,Sec-WebSocket-Accept 这个则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key。服务器:好啦好啦,知道啦,给你看我的ID CARD来证明行了吧。。
后面的,Sec-WebSocket-Protocol 则是表示最终使用的协议。

返回的状态码为101,表示同意客户端协议转换请求,并将它转换为websocket协议。以上过程都是利用http通信完成的,称之为websocket协议握手(websocket Protocol handshake),进过这握手之后,客户端和服务端就建立了websocket连接,以后的通信走的都是websocket协议了。所以总结为websocket握手需要借助于http协议,建立连接后通信过程使用websocket协议。同时需要了解的是,该websocket连接还是基于我们刚才发起http连接的那个TCP连接。一旦建立连接之后,我们就可以进行数据传输了,websocket提供两种数据传输:文本数据和二进制数据。

 

至此,HTTP已经完成它所有工作了,接下来就是完全按照Websocket协议进行了。

基于以上分析,我们可以看到,websocket能够提供低延迟,高性能的客户端与服务端的双向数据通信。它颠覆了之前web开发的请求处理响应模式,并且提供了一种真正意义上的客户端请求,服务器推送数据的模式,特别适合实时数据交互应用开发。

对比前面的http的客户端服务器的交互图可以发现WebSocket方式减少了很多TCP打开和关闭连接的操作,WebSocket的资源利用率高。

 

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

以下 API 用于创建 WebSocket 对象。

var Socket = new WebSocket(url, [protocol] );

以上代码中的第一个参数 url, 指定连接的 URL。第二个参数 protocol 是可选的,指定了可接受的子协议。

 

WebSocket 属性

以下是 WebSocket 对象的属性。假定我们使用了以上代码创建了 Socket 对象:

属性 描述
Socket.readyState

只读属性 readyState 表示连接状态,可以是以下值:

  • 0 - 表示连接尚未建立。

  • 1 - 表示连接已建立,可以进行通信。

  • 2 - 表示连接正在进行关闭。

  • 3 - 表示连接已经关闭或者连接不能打开。

Socket.bufferedAmount

只读属性 bufferedAmount 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数。

 

 

 

 

 

 

 

 

 

CONNECTING:值为0,表示正在连接。

OPEN:值为1,表示连接成功,可以通信了。

CLOSING:值为2,表示连接正在关闭。

CLOSED:值为3,表示连接已经关闭,或者打开连接失败。

 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('连接错误,请稍后再试');
  };

 

 

 

 

可以看到,当onopen触发时,对应的额就是readyState的OPEN状态,不包含OPENING;onclose触发时,对应的就是CLOSED状态,不包含CLOSING状态。

WebSocket 事件

以下是 WebSocket 对象的相关事件。假定我们使用了以上代码创建了 Socket 对象:

事件 事件处理程序 描述
open Socket.onopen 连接建立时触发
message Socket.onmessage 客户端接收服务端数据时触发
error Socket.onerror 通信发生错误时触发
close Socket.onclose 连接关闭时触发

 

 

 

 

WebSocket 方法

以下是 WebSocket 对象的相关方法。假定我们使用了以上代码创建了 Socket 对象:

方法 描述
Socket.send()

使用连接发送数据

Socket.close()

关闭连接

 

 

 

 

 

<!DOCTYPE HTML>
<html>
   <head>
   <meta charset="utf-8">
   <title>菜鸟教程(runoob.com)</title>
    
      <script type="text/javascript">
         function WebSocketTest()
         {
            if ("WebSocket" in window)
            {
               alert("您的浏览器支持 WebSocket!");
               
               // 打开一个 web socket
               var ws = new WebSocket("ws://localhost:9998/echo");
                
               ws.onopen = function()
               {
                  // Web Socket 已连接上,使用 send() 方法发送数据
                  ws.send("发送数据");
                  alert("数据发送中...");
               };
                
               ws.onmessage = function (evt) 
               { 
                  var received_msg = evt.data;
                  alert("数据已接收...");
               };
                
               ws.onclose = function()
               { 
                  // 关闭 websocket
                  alert("连接已关闭..."); 
               };
            }
            
            else
            {
               // 浏览器不支持 WebSocket
               alert("您的浏览器不支持 WebSocket!");
            }
         }
      </script>
        
   </head>
   <body>
   
      <div id="sse">
         <a href="javascript:WebSocketTest()">运行 WebSocket</a>
      </div>
      
   </body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

用websocket发送接受二进制数据

WebSocket可以通过ArrayBuffer,发送或接收二进制数据。

var socket = new WebSocket('ws://127.0.0.1:8081');
socket.binaryType = 'arraybuffer';

// Wait until socket is open
socket.addEventListener('open', function (event) {
  // Send binary data
  var typedArray = new Uint8Array(4);
  socket.send(typedArray.buffer);
});

// Receive binary data
socket.addEventListener('message', function (event) {
  var arrayBuffer = event.data;
  // ···
});

 

 

 

 

 

 

 

目前websocket的缺点是不兼容低版本浏览器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Websocket(一)——原理及基本属性和方法 的相关文章

  • 在浏览器输入URL,按下回车之后的流程?

    1 在浏览器中输入一个URL 2 查找本地配置文件 如果之前有访问过 浏览器会进行缓存 如果没有的话会在本机域名解析文件hosts文件中寻找是否存在该URL的域名映射 如Windows的配置文件 C Windows System32 dri
  • python PyQt5事件监听机制

    1 事件监听机制实际上应该是事件循环机制 搜这个搜到的结果更多更详细 2 qt的事件循环实际上不是多线程实现的 实现机制实际上是事件循环和消息队列 随便打开一个QT编写的程序 运行ProcessExplorer等待一段时间后查看进程后发现内
  • MFC实现socket网络通信--主机与服务器之间传送数据

    MFC实现socket网络通信 模拟主机与服务器之间传送数据 MFC实现socket网络通信 1 新建MFC应用程序 2 创建服务端窗口界面 3 写服务器代码 4 创建客户端窗口界面 5 客户端代码部分 6 开始调试 7 小结 MFC实现s
  • iOS平台Socket编程实践(一)

    iOS平台Socket编程实践 关于TCP Socket编程基础可以参看我的 我所不知道的TCP Socket编程 系列文章 iOS平台Socket编程主要内容及辅助工具 1 TCP协议编程 2 UDP协议编程 3 WireShark抓包辅
  • 读书笔记_《Linux高性能服务器编程》_第 5 章:网络编程基础API

    第 5 章 Linux网络编程基础API 知识要点 socket 地址 API socket 基础 API 网络信息 API 1 socket 地址API 主机字节序和网络字节序 CPU 32位 的累加器一次至少可以装载 4 字节 即一个整
  • JDK8 网络Net包研究(一)

    网络基础 1 国际标准化组织的OSI 开放式系统互联模型 七层模型 2 TCP IP协议 组 四层模型 3 TCP IP协议组 一组包括TCP协议和IP协议 UDP协议 ICMP协议和其他一些协议的协议组 网络层 IP协议 gt 网络互连协
  • select 模型解释

    套接字模式 阻塞套接字和非阻塞套接字 或者叫同步套接字和异步套接字 套接字模型 描述如何对套接字的I O行为进行管理 Winsock提供的I O模型一共有五种 select WSAAsyncSelect WSAEventSelect Ove
  • gethostbyname()函数详解

    基本概念 gethostbyname 函数主要作用 用域名或者主机名获取地址 操作系统提供的库函数 以下的讨论基于linux环境 域名系统 Domain Name System DNS 主要用于主机名字与IP地址之间的映射 每个组织机构往往
  • Socket编程之聊天程序 - 模拟Fins/ModBus协议通信过程

    设备控制软件编程涉及到的基本通信方式主要有TCP IP与串口 用到的数据通信协议有Fins与ModBus 更高级别的通信如 net中的Remoting与WCF在进行C S架构软件开发时会采用 本篇文章结合Fins ModBus协议的指令帧结
  • 【转】QT中QWS的含义

    QT编程和文档中的术语QWS的全称是Qt windows system 是QT自行开发的窗口系统 体系结构类似X Windows 是一个C S结构 由QWS Server在物理设备上显示 由QWS Client实现界面 两者通过socket
  • linux进程间通信---本地socket套接字(二)---多进程实现一个server对应多个client

    先给自己打个广告 本人的微信公众号正式上线了 搜索 张笑生的地盘 主要关注嵌入式软件开发 股票基金定投 足球等等 希望大家多多关注 有问题可以直接留言给我 一定尽心尽力回答大家的问题 想要获取完整源码的 关注公众号后回复 socket2 即
  • 计算机网络-----网络编程

    网络编程 实战 网络基础 1 什么是计算机网络 2 什么是网络编程 3 网络编程中的主要问题 4 网络通信要素 5 通信协议分层思想 IP和端口号 1 IP 1 1定义 1 2IP的分类 2 端口号 2 1定义 2 2端口号的分类 网络通信
  • Java网络编程之带文件名的文件传输(服务器+客户端)

    Java网络编程之带文件名的文件传输 文章总览 作者的话 需求分析 客户端代码 服务器端代码 服务器线程定义 结语 文章总览 作者的话 最近做的某个项目涉及到这方面的内容 因有感写下这篇学习记录 希望能给和我一样正在学习java的朋友们起到
  • Unity3d之Socket UDP协议

    原文地址 http blog csdn net dingkun520wy article details 49201245 一 Socket 套接字 UDP协议的特点 1 是基于无连接的协议 没有生成连接的延迟所以速度比TCP快 2 支持一
  • 关于Socket编程中的inet_ntop、inet_pton和inet_ntoa、inet_addr

    VS2013中调试Socket代码时 遇到了点小问题 问题代码为 cpp view plain copy inet ntoa addrClient sin addr 生成错误消息为 plain view plain copy error C
  • 使用Java socket简单模拟HTTP服务器

    1 HTTP server 接收client端的http请求并将同级目录的root 返回 package httpDemo import java io InputStream import java io OutputStream imp
  • java socket——心跳包

    首先先说说心跳包在socket连接中的意义 通过socket连接的双方为了保证在一段时间未发消息不被防火墙断开连接或者使对方及时知道自己是否已经断线而定期给对方发送的某些特殊标识字符 这个字符可以根据双方自定义 没有实际的通讯意义 而定制的
  • [总结]PostgreSQL服务启动又停止的解决方法

    安装PostgreSQL数据库8 3版本后 启动数据库服务 却弹出提示服务启动后又停止 一些服务自动停止 如果他们没有什么可做的 例如性能日志和警报服务 这个时候需要查看事件查看器的报错消息 1 当错误为could not create i
  • Windows平台下MingGW的网络socket编程模型

    Windows平台下MingGW的网络socket编程模型 1 TCP服务器 include
  • node socket 简易聊天室

    服务端 const net require net const server net createServer 用户列表 let clients 监听连接 server on connection client gt client on d

随机推荐

  • 索引设计原则

    索引设计原则 代码先行 索引后上 尽量先把业务sql写完 根据sql来看看如何建索引 联合索引尽量覆盖条件 比如可以设计一个或者两三个联合索引 尽量少建单值索引 联合索引尽量覆盖 mysql一般只会选一个索引走 很多where可能只走一个
  • org.apache.shiro.authc.AuthenticationException: Authentication failed for token submission [org.apac

    本人刚接触shiro 自己进行测试 发现报错 小白一个希望大佬们多多指点 在这跟大家说一下可能不是你们的错误 但是是我的错非常稀奇 好博客的解决方法都试了不管用 最后慢慢查慢慢看 我的错是 在走进到realm时的执行dao层方法时报这个错误
  • flutter dio 请求方式为form-data遇到的问题

    在网络中请求body中有三种方式 postbody query formdata 如下图 现在我们用的恰好是第一种方式 因为首次用这种方式 感觉也是比较坑 后面通过摸索 查看源码发现 需要用fromdata方式包装进去放到请求参数中 正确的
  • 电子元器件知识---三极管

    一 三极管 三级管可以实现这样的控制 当基级没有电流时 它是截止的 而当基极有了电流 三极管就导通了 接下来 简单阐述一下 它为什么能够实现这样的功能 下图是NPN型三极管的示意图 我们知道 硅原子外面含有4个电子 纯净的硅晶体并不导电 因
  • 前端面试思维导图,面试流程注意事项

    前端面试思维导图 前端面试有着一图足矣
  • 计算机网络笔记一(计算机网络基本概念、TCP/IP协议体系)

    1 计算机网络基础概念 1 1计算机网络定义 计算机网络就是互连的 自治的计算机集合 自治 无主从关系 互连 互联互通 1 2什么是Internet Internet是最大的计算机网络 1 2 1从组成细节的角度 由很多个ISP网络互连的网
  • Jira实战

    什么是问题类型 问题类型是为了在请求之间起到简单区别的作用 范例 缺陷 任务 功能 等等 属性 名称 描述 类型 标准类型 父 或子类型 子 图标 好处 图标在筛选器 仪表盘 面板和邮件通知上提供了视觉上的区别 你可以为每一个类型设定一个标
  • 学习笔记 JavaScript ES6 ES6中的类与继承

    学习内容 类的定义 类的继承 静态属性和方法的定义 ES6中 用class关键字声明一个类 class Peple constructor name age this name name this age age showName cons
  • C++多继承构造函数调用顺序

    class B1 public B1 int i cout lt lt consB1 lt
  • python的socket通信,实现数据监听,与串口助手连接并且收发

    1 Socket通信 1 Socket原理 Socket是一种网络通信的抽象接口 用于在不同计算机之间进行进程间通信或网络通信 Socket通常基于TCP IP协议栈 通过网络套接字 socket 在网络中传输数据 它允许不同计算机之间的进
  • 交通路标识别(毕业设计)

    概述 代码获取 可私信 在TensorFlow中实现单镜头多盒检测器 SSD 用于检测和分类交通标志 该实现能够在具有Intel Core i7 6700K的GTX 1080上实现40 45 fps 请注意 此项目仍在进行中 现在的主要问题
  • 基于 ACK Fluid 的混合云优化数据访问(一):场景与架构

    本系列文章将介绍如何基于 ACK Fluid 支持和优化混合云的数据访问场景 概述 在 AI 和大数据时代 算力即正义 强大的算力推动了源源不断的创新 然而 企业自建的算力集群存在资源容量和弹性能力相对有限的问题 在业务低谷时可能会面临高昂
  • CTF入门教程(非常详细)从零基础入门到竞赛,看这一篇就够了!

    目录 一 CTF简介 二 CTF竞赛模式 三 CTF各大题型简介 四 CTF学习路线 4 1 初期 1 html css js 2 3天 2 apache php 4 5天 3 mysql 2 3天 4 python 2 3天 5 burp
  • [Concept] IETF 国际互联网工程任务组

    IETF The Internet Engineering Task Force 国际互联网工程任务组 1 1985年成立 2 公开性质的大型国际民间团体 3 互联网标准化组织 4 主要任务 负责互联网相关技术规范的研发和制定 可以在官方网
  • 向Git提交新项目

    向Git提交新项目 假设现在存在项目iyowei cn 项目目录结构如下 1 2 3
  • Maven学习笔记二十:Maven仓库(远程仓库的配置)

    Maven仓库 远程仓库的配置 在很多情况下 默认的中央仓库无法满足项目的需求 可能项目需要的构件存在于另外一个远程仓库中 如 JBoss Maven仓库 这时 可以在POM中配置该仓库 见代码请单
  • cnn 示意图_基于BERT+CNN及GRU语言模型的司法考试问答模型

    在上文 1 提到的BERT CNN司法考试模型的基础上 对模型结构和参数进行了调整 调整后增加了CNN层数 示意图如图1 图1 BERT编码后接入的CNN结构示意图 其中详细参数见图2 图2 CNN和输出层的网络结构参数 在给出的司法考试训
  • Python爬虫实战之抓取猫眼电影

    Python爬虫实战之抓取猫眼电影 1 爬虫概念 网络爬虫 又称为网页蜘蛛 网络机器人 在FOAF社区中间 更经常的称为网页追逐者 是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本 另外一些不常使用的名字还有蚂蚁 自动索引 模拟程序
  • 原码、反码以及补码

    目录 一 概念 二 补码的意义 一 概念 计算机底层存储数据时 存储的是数据对应的二进制数字 对于整型数据 其二进制表示形式有三种 分别是 原码 反码 补码 而实际存储的是整型数据的补码 原码 反码以及补码都是有符号的 其中最高位存放符号位
  • Websocket(一)——原理及基本属性和方法

    初次接触 WebSocket 的人 都会问同样的问题 我们已经有了 HTTP 协议 为什么还需要另一个协议 它能带来什么好处 答案很简单 因为 HTTP 协议有一个缺陷 通信只能由客户端发起 举例来说 我们想了解今天的天气 只能是客户端向服