精华内容
下载资源
问答
  • 网络协议socketwebSocket

    万次阅读 多人点赞 2019-07-31 19:20:28
    一、网络协议 网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。 1、OSI七层协议 OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范。OSI模型有7层结构,从上到下分别...

    一、网络协议

    网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。

    1、OSI七层协议

    OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范。OSI模型有7层结构,从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层。

    下面的图表显示不同的协议在最初OSI模型中的位置:

    7 应用层 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP

    6 表示层 例如XDR、ASN.1、SMB、AFP、NCP

    5 会话层 例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets

    4 传输层 例如TCP、UDP、RTP、SCTP、SPX、ATP、IL

    3 网络层 例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25

    2 数据链路层 例如以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP

    1 物理层 例如线路、无线电、光纤、信鸽

    2、TCP/IP协议组

    TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何在它们之间传输的标准,从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指因特网整个TCP/IP协议族。不同于ISO模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中。

    应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等

    传输层:TCP,UDP

    网络层:IP,ICMP,OSPF,EIGRP,IGMP

    数据链路层:SLIP,CSLIP,PPP,MTU

    3、OSI七层和TCP/IP四层的关系

    3.1 OSI引入了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型。

    3.2 OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有协议和应用再提出了模型,且是参照的OSI模型。

    3.3 OSI是一种理论下的模型,而TCP/IP已被广泛使用,成为网络互联事实上的标准。

    3.4 OSI的应用层、表示层、会话层可以算到TCP/IP的应用层里。

    4、总结

    每一抽象层建立在低一层提供的服务上,并且为高一层提供服务。

    通过上述介绍,就可以搞清楚例如HTTP协议和TCP协议的区别之类的问题了。TPC协议是一种传输层协议,主要解决数据如何在网络中传输,而HTTP协议是应用层协议,主要解决如何包装数据。关于TCP和HTTP协议的关系,网上有一段比较容易理解的介绍:“我们在传输数据时,可以直接使用(传输层)TCP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作为应用层协议,以封装HTTP文本信息,然后使用TCP作为传输层协议将它发到网络上。”

    TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

    UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包(如图2所示)。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ登陆采用TCP协议和HTTP协议,你和好友之间发送消息时主要采用UDP协议发消息,因此有时会出现收不到消息的情况。

     

    二、socket

    我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。socket是一组接口,在设计模式中,socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在socket接口后面,对用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议。

     

    三、webSocket

    1、简介

    WebSocket协议是基于TCP的一种新的网络协议,和http协议一样属于应用层协议,它实现了浏览器与服务器全双工(full-duplex)通信,也就是允许服务器主动发送信息给客户端。我在实现二维码扫描登录时曾使用过,有了它就不需要通过轮询或者建立长连接的方式来使客户端实时获取扫码状态,因为当扫码后,服务器端可以主动发送消息通知客户端。

    2、webSocket和http的区别

    http链接分为短链接和长链接,短链接是每次请求都要重新建立TCP链接,TCP又要三次握手才能建立,然后发送自己的信息。即每一个request对应一个response。长链接是在一定的期限内保持TCP连接不断开。客户端与服务器通信,必须要由客户端发起然后服务器返回结果。客户端是主动的,服务器是被动的。

    简单的说,WebSocket协议之前,双工通信是通过多个http链接轮询来实现的,这导致了效率低下。WebSocket解决了这个问题,他实现了多路复用,他是全双工通信。在webSocket协议下客服端和浏览器可以同时发送信息。建立了WebSocket之后服务器不必在浏览器发送request请求之后才能发送信息到浏览器。这时的服务器已有主动权想什么时候发就可以什么时候发送信息到客户端,而且信息当中不必再带有head的部分信息了。与http的长链接通信来比,这种方式不仅能降低服务器的压力,而且信息当中也减少了部分多余的信息。

    3、webSocket和socket的区别

    就像Java和JavaScript,并没有什么太大的关系,但又不能说完全没关系。可以这么说:

    • 命名方面,Socket是一个深入人心的概念,WebSocket借用了这一概念;
    • 使用方面,完全两个东西。

    总之,可以把WebSocket想象成HTTP,HTTP和Socket什么关系,WebSocket和Socket就是什么关系。

    最后附上一张有意思的图片:

     

    展开全文
  • WebSocket介绍和Socket的区别

    万次阅读 多人点赞 2019-06-03 13:55:26
    WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。 ——百度百科 目的:即时通讯,替代轮询 应用场景:网站上的即时通讯是很常见的...

    WebSocket介绍与原理 

    WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。

    ——百度百科

    目的:即时通讯,替代轮询

    应用场景:网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等。按照以往的技术能力通常是采用轮询、Comet技术解决。

    HTTP协议是非持久化的,单向的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。当需要即时通讯时,通过轮询在特定的时间间隔(如1秒),由浏览器向服务器发送Request请求,然后将最新的数据返回给浏览器。这样的方法最明显的缺点就是需要不断的发送请求,而且通常HTTP request的Header是非常长的,为了传输一个很小的数据 需要付出巨大的代价,是很不合算的,占用了很多的宽带。

    缺点:会导致过多不必要的请求,浪费流量和服务器资源,每一次请求、应答,都浪费了一定流量在相同的头部信息上

    然而WebSocket的出现可以弥补这一缺点。在WebSocket中,只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP的通信通道进行数据的传送。

    原理:WebSocket同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的。

    连接过程 —— 握手过程

    1. 浏览器、服务器建立TCP连接,三次握手。这是通信的基础,传输控制层,若失败后续都不执行。
    2. TCP连接成功后,浏览器通过HTTP协议向服务器传送WebSocket支持的版本号等信息。(开始前的HTTP握手)
    3. 服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据。
    4. 当收到了连接成功的消息后,通过TCP通道进行传输通信。

    WebSocket与HTTP的关系

    相同点

    • 都是一样基于TCP的,都是可靠性传输协议。
    • 都是应用层协议。

    不同点

    • WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。
    • WebSocket是需要握手进行建立连接的。

    联系

    • WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的。

    WebSocket与Socket的关系

    Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。当两台主机通信时,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次。WebSocket则是一个典型的应用层协议。Socket是传输控制层协议,WebSocket是应用层协议。

    HTML5与WebSocket的关系

    WebSocket API 是 HTML5 标准的一部分, 但这并不代表 WebSocket 一定要用在 HTML 中,或者只能在基于浏览器的应用程序中使用。实际上,许多语言、框架和服务器都提供了 WebSocket 支持,例如:

    * 基于 C 的 libwebsocket.org
    * 基于 Node.js 的 Socket.io
    * 基于 Python 的 ws4py
    * 基于 C++ 的 WebSocket++
    * Apache 对 WebSocket 的支持: Apache Module mod_proxy_wstunnel
    * Nginx 对 WebSockets 的支持: NGINX as a WebSockets Proxy 、 NGINX Announces Support for WebSocket Protocol 、WebSocket proxying
    * lighttpd 对 WebSocket 的支持:mod_websocket

    WebSocket 机制

    WebSocket 是 HTML5 一种新的协议。它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯,它建立在 TCP 之上,同 HTTP 一样通过 TCP 来传输数据,但是它和 HTTP 最大不同是:

    WebSocket 是一种双向通信协议,在建立连接后,WebSocket 服务器和 Browser/Client Agent 都能主动的向对方发送或接收数据,就像 Socket 一样;WebSocket 需要类似 TCP 的客户端和服务器端通过握手连接,连接成功后才能相互通信。

    非 WebSocket 模式传统 HTTP 客户端与服务器的交互如下图所示:

    图 1. 传统 HTTP 请求响应客户端服务器交互图

    使用 WebSocket 模式客户端与服务器的交互如下图:

    图 2.WebSocket 请求响应客户端服务器交互图

    上图对比可以看出,相对于传统 HTTP 每次请求-应答都需要客户端与服务端建立连接的模式,WebSocket 是类似 Socket 的 TCP 长连接的通讯模式,一旦 WebSocket 连接建立后,后续数据都以帧序列的形式传输。在客户端断开 WebSocket 连接或 Server 端断掉连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实时性优势明显。

    我们再通过客户端和服务端交互的报文看一下 WebSocket 通讯与传统 HTTP 的不同:

    在客户端,new WebSocket 实例化一个新的 WebSocket 客户端对象,连接类似 ws://yourdomain:port/path 的服务端 WebSocket URL,WebSocket 客户端对象会自动解析并识别为 WebSocket 请求,从而连接服务端端口,执行双方握手过程,客户端发送数据格式类似:

    清单 1.WebSocket 客户端连接报文

    GET /webfin/websocket/ HTTP/1.1
    Host: localhost
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==
    Origin: 
    http://localhost
    :8080
    Sec-WebSocket-Version: 13
    http://localhost
    :8080
    Sec-WebSocket-Version: 13

    可以看到,客户端发起的 WebSocket 连接报文类似传统 HTTP 报文,”Upgrade:websocket”参数值表明这是 WebSocket 类型请求,“Sec-WebSocket-Key”是 WebSocket 客户端发送的一个 base64 编码的密文,要求服务端必须返回一个对应加密的“Sec-WebSocket-Accept”应答,否则客户端会抛出“Error during WebSocket handshake”错误,并关闭连接。

    服务端收到报文后返回的数据格式类似:

    清单 2.WebSocket 服务端响应报文

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=

    “Sec-WebSocket-Accept”的值是服务端采用与客户端一致的密钥计算出来后返回客户端的,“HTTP/1.1 101 Switching Protocols”表示服务端接受 WebSocket 协议的客户端连接,经过这样的请求-响应处理后,客户端服务端的 WebSocket 连接握手成功, 后续就可以进行 TCP 通讯了。

    在开发方面,WebSocket API 也十分简单,我们只需要实例化 WebSocket,创建连接,然后服务端和客户端就可以相互发送和响应消息,在下文 WebSocket 实现及案例分析部分,可以看到详细的 WebSocket API 及代码实现。

    WebSocket 实现
    如上文所述,WebSocket 的实现分为客户端和服务端两部分,客户端(通常为浏览器)发出 WebSocket 连接请求,服务端响应,实现类似 TCP 握手的动作,从而在浏览器客户端和 WebSocket 服务端之间形成一条 HTTP 长连接快速通道。两者之间后续进行直接的数据互相传送,不再需要发起连接和相应。

    以下简要描述 WebSocket 服务端 API 及客户端 API。

    WebSocket 服务端 API
    WebSocket 服务端在各个主流应用服务器厂商中已基本获得符合 JEE JSR356 标准规范 API 的支持,以下列举了部分常见的商用及开源应用服务器对 WebSocket Server 端的支持情况:


    表 1.WebSocket 服务端支持

    厂商应用服务器备注
    IBMWebSphereWebSphere 8.0 以上版本支持,7.X 之前版本结合 MQTT 支持类似的 HTTP 长连接
    甲骨文WebLogicWebLogic 12c 支持,11g 及 10g 版本通过 HTTP Publish 支持类似的 HTTP 长连接
    微软IISIIS 7.0+支持
    ApacheTomcatTomcat 7.0.5+支持,7.0.2X 及 7.0.3X 通过自定义 API 支持
    JettyJetty 7.0+支持


    以下我们使用 Tomcat7.0.5 版本的服务端示例代码说明 WebSocket 服务端的实现:

    JSR356 的 WebSocket 规范使用 javax.websocket.*的 API,可以将一个普通 Java 对象(POJO)使用 @ServerEndpoint 注释作为 WebSocket 服务器的端点,代码示例如下:

    清单 3.WebSocket 服务端 API 示例 

    @ServerEndpoint("/echo")
     public class EchoEndpoint {
    
     @OnOpen
     public void onOpen(Session session) throws IOException {
     //以下代码省略...
     }
     
     @OnMessage
     public String onMessage(String message) {
     //以下代码省略...
     }
    
     @Message(maxMessageSize=6)
     public void receiveMessage(String s) {
     //以下代码省略...
     } 
    
     @OnError
     public void onError(Throwable t) {
     //以下代码省略...
     }
     
     @OnClose
     public void onClose(Session session, CloseReason reason) {
     //以下代码省略...
     } 
     
     }

    代码解释:

    上文的简洁代码即建立了一个 WebSocket 的服务端,@ServerEndpoint("/echo") 的 annotation 注释端点表示将 WebSocket 服务端运行在 ws://[Server 端 IP 或域名]:[Server 端口]/websockets/echo 的访问端点,客户端浏览器已经可以对 WebSocket 客户端 API 发起 HTTP 长连接了。

    使用 ServerEndpoint 注释的类必须有一个公共的无参数构造函数,@onMessage 注解的 Java 方法用于接收传入的 WebSocket 信息,这个信息可以是文本格式,也可以是二进制格式。

    OnOpen 在这个端点一个新的连接建立时被调用。参数提供了连接的另一端的更多细节。Session 表明两个 WebSocket 端点对话连接的另一端,可以理解为类似 HTTPSession 的概念。

    OnClose 在连接被终止时调用。参数 closeReason 可封装更多细节,如为什么一个 WebSocket 连接关闭。

    更高级的定制如 @Message 注释,MaxMessageSize 属性可以被用来定义消息字节最大限制,在示例程序中,如果超过 6 个字节的信息被接收,就报告错误和连接关闭。

    注意:早期不同应用服务器支持的 WebSocket 方式不尽相同,即使同一厂商,不同版本也有细微差别,如 Tomcat 服务器 7.0.5 以上的版本都是标准 JSR356 规范实现,而 7.0.2x/7.0.3X 的版本使用自定义 API (WebSocketServlet 和 StreamInbound, 前者是一个容器,用来初始化 WebSocket 环境;后者是用来具体处理 WebSocket 请求和响应,详见案例分析部分),且 Tomcat7.0.3x 与 7.0.2x 的 createWebSocketInbound 方法的定义不同,增加了一个 HttpServletRequest 参数,使得可以从 request 参数中获取更多 WebSocket 客户端的信息,如下代码所示:

    清单 4.Tomcat7.0.3X 版本 WebSocket API

    public class EchoServlet extends WebSocketServlet {
    @Override
    protected StreamInbound createWebSocketInbound(String subProtocol,
    HttpServletRequest request) {
     //以下代码省略....
    return new MessageInbound() {
     //以下代码省略....
    }
    protected void onBinaryMessage(ByteBuffer buffer)
    throws IOException {
     //以下代码省略...
    }
    protected void onTextMessage(CharBuffer buffer) throws IOException {
     getWsOutbound().writeTextMessage(buffer);
     //以下代码省略...
    }
    };
    }
    }

    因此选择 WebSocket 的 Server 端重点需要选择其版本,通常情况下,更新的版本对 WebSocket 的支持是标准 JSR 规范 API,但也要考虑开发易用性及老版本程序移植性等方面的问题,如下文所述的客户案例,就是因为客户要求统一应用服务器版本所以使用的 Tomcat 7.0.3X 版本的 WebSocketServlet 实现,而不是 JSR356 的 @ServerEndpoint 注释端点。

    WebSocket 客户端 API
    对于 WebSocket 客户端,主流的浏览器(包括 PC 和移动终端)现已都支持标准的 HTML5 的 WebSocket API,这意味着客户端的 WebSocket JavaScirpt 脚本具备良好的一致性和跨平台特性,以下列举了常见的浏览器厂商对 WebSocket 的支持情况:

    表 2.WebSocket 客户端支持

    浏览器支持情况
    ChromeChrome version 4+支持
    FirefoxFirefox version 5+支持
    IEIE version 10+支持
    SafariIOS 5+支持
    Android Brower Android 4.5+支持

    客户端 WebSocket API 基本上已经在各个主流浏览器厂商中实现了统一,因此使用标准 HTML5 定义的 WebSocket 客户端的 JavaScript API 即可,当然也可以使用业界满足 WebSocket 标准规范的开源框架,如 Socket.io。

    以下以一段代码示例说明 WebSocket 的客户端实现:

    清单 5.WebSocket 客户端 API 示例

    var ws = new WebSocket(“ws://echo.websocket.org”); 
    ws.onopen = function(){ws.send(“Test!”); }; 
    ws.onmessage = function(evt){console.log(evt.data);ws.close();}; 
    ws.onclose = function(evt){console.log(“WebSocketClosed!”);}; 
    ws.onerror = function(evt){console.log(“WebSocketError!”);};

    第一行代码是在申请一个 WebSocket 对象,参数是需要连接的服务器端的地址,同 HTTP 协议开头一样,WebSocket 协议的 URL 使用 ws://开头,另外安全的 WebSocket 协议使用 wss://开头。

    第二行到第五行为 WebSocket 对象注册消息的处理函数,WebSocket 对象一共支持四个消息 onopen, onmessage, onclose 和 onerror,有了这 4 个事件,我们就可以很容易很轻松的驾驭 WebSocket。

    当 Browser 和 WebSocketServer 连接成功后,会触发 onopen 消息;如果连接失败,发送、接收数据失败或者处理数据出现错误,browser 会触发 onerror 消息;当 Browser 接收到 WebSocketServer 发送过来的数据时,就会触发 onmessage 消息,参数 evt 中包含 Server 传输过来的数据;当 Browser 接收到 WebSocketServer 端发送的关闭连接请求时,就会触发 onclose 消息。我们可以看出所有的操作都是采用异步回调的方式触发,这样不会阻塞 UI,可以获得更快的响应时间,更好的用户体验。

    展开全文
  • socket通信和websocket通信协议

    千次阅读 2018-08-10 12:04:32
    服务器端通过创建一个socket的通信链接,然后绑定socket和端口号并监听,就可以接收来自客户端的连接请求了,前提是客户端也有socket并且连接到了该服务器所在设备的端口。客户端通过send想socket中写入信息,服务器...

    socket通信

    1. 网络上的两个程序通过一个双向的通信链接实现数据的交换,这个链接的一端称为一个socket
    2. socket通信流程图

    通信流程图

    服务器端通过创建一个socket的通信链接,然后绑定socket和端口号并监听,就可以接收来自客户端的连接请求了,前提是客户端也有socket并且连接到了该服务器所在设备的端口。客户端通过send想socket中写入信息,服务器就可以读到。如果服务器关了,客户端程序是不能够正常登陆的。

              nodejs里面提供的net模块可以实现socket通信,因为它提供了一些用于底层的网络通信的小工具,包含了创建服务器/客户端的方法。

    //server.js
    //服务器文件
    var net = require("net");
    var server = new net.createServer;
    var clientObiect = {};
    //流水账号--区分服务器上的客户端
    var i = 0;
    //连接
    server.on("connection",(client)=>{
    	client.name = ++i;
    	clientObiect[client.name ]=client;
    	
    	client.on("data",(data)=>{
    		console.log("客户端发来:"+data);
    		huifu(client,data);
    	})
    	
    })
    function huifu(client,message){
    //	client.write("服务器已收到")	
    
    	for(let i in clientObiect){
    		clientObiect[i].write(client.name+"说:"+message);		
    	}
    	
    	
    }
    
    server.listen(3000)
    
    //client.js
    //客户端
    var net = require("net");
    var readline = require("readline");
    var socket = new net.Socket;
    var port = 3000;
    var hostname ="localhost";
    //var hostname ="10.8.162.15";
    //连接服务器
    socket.connect(port,hostname,()=>{
    	socket.write("超级无敌美少女已上线")	
    })
    //接收服务器数据
    socket.on("data",(data)=>{
    //	console.log("服务端发来:"+data)	
    	console.log(""+data)
    	say()
    })
    
    var r1 = new readline.createInterface({	
    	input:process.stdin,
    	output:process.stdout
    })
    
    function say(){
    	r1.question("请输入:",(str)=>{
    		socket.write(str)
    	})	
    }
    

    有了客户端和服务端,就可以通过node server  启动服务器,通过node client启动客户端(打开多个窗口,多个客户端),上面可以实现多个客户端程序之间的一个通信。改变端口号可以连接上其他计算机的服务器提供的端口,和其他客户端进行聊天。

    websocket通信

    • WebSocket是html5新增加的一种双工通信协议,目前流行的浏览器都支持这个协议

    它和socket不同的是,他属于前端的一个通信,和nodejs没啥关系。而socket是一个后端的通信协议,可以用来测试然后应用在客户端上。

    首先,npm init 创建一个依赖文件,再安装ws的一个依赖npm i ws -D,之后就可以去创建websocket里面的服务器和客户端了。

    服务器:

    //wsserver.js
    //服务器文件
    var wsserver = require("ws").Server;
    var wss = new wsserver({port:3000});
    var clientObiect = {};
    //流水账号---用来区分服务器上的客户端
    var i = 0;
    //连接
    wss.on("connection",(client)=>{
    	client.name = ++i;
    	clientObiect[client.name ]=client;	
    	client.on("message",(data)=>{
    		console.log("客户端发来:"+data);
    		huifu(client,data);
    	})
    })
    
    function huifu(client,message){
    
    	for(let i in clientObiect){
    		clientObiect[i].send(client.name+"说:"+message);		
    	}
    	
    }
    
    

    客户端:

    //demo.html
    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		<style type="text/css">
    			*{
    				margin: 0;
    				padding: 0;
    			}
    			#con{
    				width: 500px;
    				height: 400px;
    				border: 1px solid red;
    			}
    			
    		</style>
    	</head>
    	<body>
    		<h1>h5通信</h1>
    		<div id="con"></div>
    		
    		<input type="text" id="ipt"/>
    		<button id="btn">发送</button>
    	</body>
    	<script type="text/javascript">
    //申请一个WebSocket对象,参数是需要连接服务器的地址,遵循的是ws协议
    		var client = new WebSocket('ws://localhost:3000');
    		client.onopen=function(){};
    		
    		client.onmessage =function(a){
    			document.getElementById("con").innerHTML+= "<p>"+a.data+"</p>"
    		}
    		
    		document.getElementById("btn").onclick=function(){
    			client.send(document.getElementById("ipt").value);
    			document.getElementById("ipt").value = "";
    		}
    		
    	</script>
    </html>
    

    WebSocket对象一共支持四个消息 onopen, onmessage, oncloseonerror

    • 当Browser和WebSocketServer连接成功后,会触发onopen消息;
    • 如果连接失败,发送、接收数据失败或者处理数据出现错误,browser会触发onerror消息;
    • 当Browser接收到WebSocketServer发送过来的数据时,就会触发onmessage消息,参数evt中包含server传输过来的数据;
    • 当Browser接收到WebSocketServer端发送的关闭连接请求时,就会触发onclose消息。

    我们可以看出所有的操作都是采用消息的方式触发的,这样就不会阻塞UI,使得UI有更快的响应时间,得到更好的用户体验。

    展开全文
  • 点击关注公众号,利用碎片时间学习WebSocket介绍与原理WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开...

    点击关注公众号,利用碎片时间学习

    WebSocket介绍与原理

    WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。

    ——百度百科

    目的: 即时通讯,替代轮询

    应用场景: 网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等。按照以往的技术能力通常是采用轮询、Comet技术解决。

    HTTP协议是非持久化的,单向的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。当需要即时通讯时,通过轮询在特定的时间间隔(如1秒),由浏览器向服务器发送Request请求,然后将最新的数据返回给浏览器。这样的方法最明显的缺点就是需要不断的发送请求,而且通常HTTP request的Header是非常长的,为了传输一个很小的数据 需要付出巨大的代价,是很不合算的,占用了很多的宽带。

    缺点: 会导致过多不必要的请求,浪费流量和服务器资源,每一次请求、应答,都浪费了一定流量在相同的头部信息上

    然而WebSocket的出现可以弥补这一缺点。在WebSocket中,只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP的通信通道进行数据的传送。

    原理: WebSocket同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的。

    连接过程 —— 握手过程

    1. 浏览器、服务器建立TCP连接,三次握手。这是通信的基础,传输控制层,若失败后续都不执行。

    2. TCP连接成功后,浏览器通过HTTP协议向服务器传送WebSocket支持的版本号等信息。(开始前的HTTP握手)

    3. 服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据。

    4. 当收到了连接成功的消息后,通过TCP通道进行传输通信。

    WebSocket与HTTP的关系

    相同点

    • 都是一样基于TCP的,都是可靠性传输协议。

    • 都是应用层协议。

    不同点

    • WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。

    • WebSocket是需要握手进行建立连接的。

    联系

    • WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的。

    WebSocket与Socket的关系

    Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。

    在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

    当两台主机通信时,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次。WebSocket则是一个典型的应用层协议。Socket是传输控制层协议,WebSocket是应用层协议。推荐:Java进阶视频资源

    HTML5与WebSocket的关系

    WebSocket API 是 HTML5 标准的一部分, 但这并不代表 WebSocket 一定要用在 HTML 中,或者只能在基于浏览器的应用程序中使用。实际上,许多语言、框架和服务器都提供了 WebSocket 支持,例如:

    • 基于 C 的 libwebsocket.org

    • 基于 Node.js 的 Socket.io

    • 基于 Python 的 ws4py

    • 基于 C++ 的 WebSocket++

    • Apache 对 WebSocket 的支持:Apache Module mod_proxy_wstunnel

    • Nginx 对 WebSockets 的支持:NGINX as a WebSockets Proxy 、 NGINX Announces Support for WebSocket Protocol 、WebSocket proxying

    • lighttpd 对 WebSocket 的支持:mod_websocket

    WebSocket 机制

    WebSocket 是 HTML5 一种新的协议。它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯,它建立在 TCP 之上,同 HTTP 一样通过 TCP 来传输数据,但是它和 HTTP 最大不同是:

    WebSocket 是一种双向通信协议,在建立连接后,WebSocket 服务器和 Browser/Client Agent 都能主动的向对方发送或接收数据,就像 Socket 一样;WebSocket 需要类似 TCP 的客户端和服务器端通过握手连接,连接成功后才能相互通信。

    非 WebSocket 模式传统 HTTP 客户端与服务器的交互如下图所示:

    图 1. 传统 HTTP 请求响应客户端服务器交互图

    使用 WebSocket 模式客户端与服务器的交互如下图:

    图 2.WebSocket 请求响应客户端服务器交互图

    上图对比可以看出,相对于传统 HTTP 每次请求-应答都需要客户端与服务端建立连接的模式,WebSocket 是类似 Socket 的 TCP 长连接的通讯模式,一旦 WebSocket 连接建立后,后续数据都以帧序列的形式传输。

    在客户端断开 WebSocket 连接或 Server 端断掉连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实时性优势明显。

    我们再通过客户端和服务端交互的报文看一下 WebSocket 通讯与传统 HTTP 的不同:

    在客户端,new WebSocket 实例化一个新的 WebSocket 客户端对象,连接类似 ws://yourdomain:port/path 的服务端 WebSocket URL,WebSocket 客户端对象会自动解析并识别为 WebSocket 请求,从而连接服务端端口,执行双方握手过程,客户端发送数据格式类似:

    清单 1.WebSocket 客户端连接报文

    GET /webfin/websocket/ HTTP/1.1
    Host: localhost
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==
    Origin: 
    http://localhost
    :8080
    Sec-WebSocket-Version: 13
    http://localhost
    :8080
    Sec-WebSocket-Version: 13
    

    可以看到,客户端发起的 WebSocket 连接报文类似传统 HTTP 报文,”Upgrade:websocket”参数值表明这是 WebSocket 类型请求,“Sec-WebSocket-Key”是 WebSocket 客户端发送的一个 base64 编码的密文,要求服务端必须返回一个对应加密的“Sec-WebSocket-Accept”应答,否则客户端会抛出“Error during WebSocket handshake”错误,并关闭连接。

    服务端收到报文后返回的数据格式类似:

    清单 2.WebSocket 服务端响应报文

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=
    

    “Sec-WebSocket-Accept”的值是服务端采用与客户端一致的密钥计算出来后返回客户端的,“HTTP/1.1 101 Switching Protocols”表示服务端接受 WebSocket 协议的客户端连接,经过这样的请求-响应处理后,客户端服务端的 WebSocket 连接握手成功, 后续就可以进行 TCP 通讯了。

    在开发方面,WebSocket API 也十分简单,我们只需要实例化 WebSocket,创建连接,然后服务端和客户端就可以相互发送和响应消息,在下文 WebSocket 实现及案例分析部分,可以看到详细的 WebSocket API 及代码实现。

    WebSocket 实现

    如上文所述,WebSocket 的实现分为客户端和服务端两部分,客户端(通常为浏览器)发出 WebSocket 连接请求,服务端响应,实现类似 TCP 握手的动作,从而在浏览器客户端和 WebSocket 服务端之间形成一条 HTTP 长连接快速通道。两者之间后续进行直接的数据互相传送,不再需要发起连接和相应。

    以下简要描述 WebSocket 服务端 API 及客户端 API。推荐:Java进阶视频资源

    WebSocket 服务端 API

    WebSocket 服务端在各个主流应用服务器厂商中已基本获得符合 JEE JSR356 标准规范 API 的支持,以下列举了部分常见的商用及开源应用服务器对 WebSocket Server 端的支持情况:

    表 1.WebSocket 服务端支持

    以下我们使用 Tomcat7.0.5 版本的服务端示例代码说明 WebSocket 服务端的实现:

    JSR356 的 WebSocket 规范使用 javax.websocket.*的 API,可以将一个普通 Java 对象(POJO)使用 @ServerEndpoint 注释作为 WebSocket 服务器的端点,代码示例如下:

    清单 3.WebSocket 服务端 API 示例

    @ServerEndpoint("/echo")
     public class EchoEndpoint {
     
     @OnOpen
     public void onOpen(Session session) throws IOException {
     //以下代码省略...
     }
     
     @OnMessage
     public String onMessage(String message) {
     //以下代码省略...
     }
     
     @Message(maxMessageSize=6)
     public void receiveMessage(String s) {
     //以下代码省略...
     } 
     
     @OnError
     public void onError(Throwable t) {
     //以下代码省略...
     }
     
     @OnClose
     public void onClose(Session session, CloseReason reason) {
     //以下代码省略...
     } 
     
     }
    

    代码解释:

    上文的简洁代码即建立了一个 WebSocket 的服务端,@ServerEndpoint("/echo") 的 annotation 注释端点表示将 WebSocket 服务端运行在 ws://[Server 端 IP 或域名]:[Server 端口]/websockets/echo 的访问端点,客户端浏览器已经可以对 WebSocket 客户端 API 发起 HTTP 长连接了。

    使用 ServerEndpoint 注释的类必须有一个公共的无参数构造函数,@onMessage 注解的 Java 方法用于接收传入的 WebSocket 信息,这个信息可以是文本格式,也可以是二进制格式。

    OnOpen 在这个端点一个新的连接建立时被调用。参数提供了连接的另一端的更多细节。Session 表明两个 WebSocket 端点对话连接的另一端,可以理解为类似 HTTPSession 的概念。

    OnClose 在连接被终止时调用。参数 closeReason 可封装更多细节,如为什么一个 WebSocket 连接关闭。

    更高级的定制如 @Message 注释,MaxMessageSize 属性可以被用来定义消息字节最大限制,在示例程序中,如果超过 6 个字节的信息被接收,就报告错误和连接关闭。

    注意:早期不同应用服务器支持的 WebSocket 方式不尽相同,即使同一厂商,不同版本也有细微差别,如 Tomcat 服务器 7.0.5 以上的版本都是标准 JSR356 规范实现,而 7.0.2x/7.0.3X 的版本使用自定义 API (WebSocketServlet 和 StreamInbound, 前者是一个容器,用来初始化 WebSocket 环境;后者是用来具体处理 WebSocket 请求和响应,详见案例分析部分),且 Tomcat7.0.3x 与 7.0.2x 的 createWebSocketInbound 方法的定义不同,增加了一个 HttpServletRequest 参数,使得可以从 request 参数中获取更多 WebSocket 客户端的信息,如下代码所示:

    清单 4.Tomcat7.0.3X 版本 WebSocket API

    public class EchoServlet extends WebSocketServlet {
    @Override
    protected StreamInbound createWebSocketInbound(String subProtocol,
    HttpServletRequest request) {
     //以下代码省略....
    return new MessageInbound() {
     //以下代码省略....
    }
    protected void onBinaryMessage(ByteBuffer buffer)
    throws IOException {
     //以下代码省略...
    }
    protected void onTextMessage(CharBuffer buffer) throws IOException {
     getWsOutbound().writeTextMessage(buffer);
     //以下代码省略...
    }
    };
    }
    }
    

    因此选择 WebSocket 的 Server 端重点需要选择其版本,通常情况下,更新的版本对 WebSocket 的支持是标准 JSR 规范 API,但也要考虑开发易用性及老版本程序移植性等方面的问题,如下文所述的客户案例,就是因为客户要求统一应用服务器版本所以使用的 Tomcat 7.0.3X 版本的 WebSocketServlet 实现,而不是 JSR356 的 @ServerEndpoint 注释端点。

    WebSocket 客户端 API

    对于 WebSocket 客户端,主流的浏览器(包括 PC 和移动终端)现已都支持标准的 HTML5 的 WebSocket API,这意味着客户端的 WebSocket JavaScirpt 脚本具备良好的一致性和跨平台特性,以下列举了常见的浏览器厂商对 WebSocket 的支持情况:

    表 2.WebSocket 客户端支持

    客户端 WebSocket API 基本上已经在各个主流浏览器厂商中实现了统一,因此使用标准 HTML5 定义的 WebSocket 客户端的 JavaScript API 即可,当然也可以使用业界满足 WebSocket 标准规范的开源框架,如 Socket.io。

    以下以一段代码示例说明 WebSocket 的客户端实现:

    清单 5.WebSocket 客户端 API 示例

    var ws = new WebSocket(“ws://echo.websocket.org”); 
    ws.onopen = function(){ws.send(“Test!”); }; 
    ws.onmessage = function(evt){console.log(evt.data);ws.close();}; 
    ws.onclose = function(evt){console.log(“WebSocketClosed!”);}; 
    ws.onerror = function(evt){console.log(“WebSocketError!”);};
    

    第一行代码是在申请一个 WebSocket 对象,参数是需要连接的服务器端的地址,同 HTTP 协议开头一样,WebSocket 协议的 URL 使用 ws://开头,另外安全的 WebSocket 协议使用 wss://开头。

    第二行到第五行为 WebSocket 对象注册消息的处理函数,WebSocket 对象一共支持四个消息 onopen, onmessage, onclose 和 onerror,有了这 4 个事件,我们就可以很容易很轻松的驾驭 WebSocket。

    当 Browser 和 WebSocketServer 连接成功后,会触发 onopen 消息;如果连接失败,发送、接收数据失败或者处理数据出现错误,browser 会触发 onerror 消息;当 Browser 接收到 WebSocketServer 发送过来的数据时,就会触发 onmessage 消息,参数 evt 中包含 Server 传输过来的数据;当 Browser 接收到 WebSocketServer 端发送的关闭连接请求时,就会触发 onclose 消息。我们可以看出所有的操作都是采用异步回调的方式触发,这样不会阻塞 UI,可以获得更快的响应时间,更好的用户体验。

    (感谢阅读,希望对你所有帮助)

    来源:blog.csdn.net/qushaming/

    article/details/90747326

    推荐好文

    主流Java进阶技术(学习资料分享)

    分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!

    能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮

    展开全文
  • websockethttp协议、socket接口了解 以下是方便我自己记忆的个人总结,可以直接跳过去看参考文档 websockethttp都是应用层的协议 socket不是协议,只是接口,封装好用来去帮助...http和websocket协议都是基于TCP/
  • 2、WebSocket协议是基于TCP的一种新的网络协议,http协议一样属于应用层协议,是一种让客户端服务器之间能进行双向实时通信的技术。 二、webSocket和Socket的区别 1、原理上的区别: Socket是传输控制层协议,...
  • 如果是用Node 编译,则使用require('socket.io-client')。引入socket.io的JS库const socket = io('http://localhost');导入socket.io模块const io = require('socket.io-client');// or with import...
  • WebSocket是HTML5中新协议、新API.Http协议本身只有1.01.1,也就是所谓的Keep-alive,把多个Http请求合并为一个。二、WebSocket是什么样的协议,具体有什么优点。首先,相对于Http这种非持久的协议来说,Web...
  • websocket简介及和socket对比

    千次阅读 2019-01-22 17:41:34
    2.websocket和socket的区别是什么 1)socket是一个工作在OSI模型会话层(第5层)的抽象层。是对TCP/IP协议族的一个封装(目的是方便程序员的使用),它是一个API(使用TCP/IP协议的接口)。...
  • websocket socket socket.io的区别

    千次阅读 2019-08-20 16:10:07
    websocket socket socket.io的区别 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它...Socket是传输控制层协议WebSocket是应用层协议Socket.i...
  • websocket协议规范

    2021-02-05 11:56:25
    websocket协议规范 作者:二郎666时间: 2019-11-02 08:06:49 标签:网络通信协议websocketwebsocket协议客户端vbwebsocket教程 《websocket协议详解》教程分三篇: 什么是websocket websocket协议规范 用vb...
  • websocketsocket、mqtt的区别

    千次阅读 2020-07-30 16:12:27
    websocket协议是在应用层,层次跟http一样,都是基于tcp协议的。websocet跟http不同的是,websocket是全双工通信,即服务端与客户端可以同时向对方传递消息。 socket是对tcp/ip协议族的封装的接口,可以通过socke...
  • 一、WebSocket简介WebSocket是一种基于TCP连接的全双工通信的协议,其工作在应用层,建立连接的时候通过复用http握手通道,完成http协议的切换升级,即切换到WebSocket协议,协议切换成功后,将不再需要客户端发起...
  • WebSocket同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的。 连接过程 —— 握手过程 浏览器、服务器建立TCP连接,三次握手。这是通信的基础,传输控制层,若失败后续都不执行。 TCP连接...
  • WebSocket协议解析

    2020-12-20 08:02:11
    WebSocket协议解析现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是指在特定的时间间隔(如每一秒),由浏览器对服务器发起HTTP请求,然后由服务器返回数据给浏览器。由于HTTP协议是惰性的,只有客户端...
  • server { listen 80;... listen [::]:80;... ssl_protocols TLSv1 TLSv1.1 TLSv1.2;... 我是这样配置的 不过因为你的location /wss可能你访问的话 var socket= io("wss://www.baidu.com/wss:3120",{ 'reconnect': true });
  • Nodejs实现websocket的4种方式:socket.io、WebSocket-Node、faye-websocket-node、node-websocket-server,这里主要使用的是socket.io 1、服务端: 1)首先安装socket.io  npm install socket.io 2)server.js...
  • Websocket协议基于TCP全双工协议,即可以从客户端向服务器端发送请求,也可以从服务器端主动向客户端发送消息。HTTP协议只能从客户端向服务器发送请求,服务器端收到请求后,做出响应,...
  • 作者@欲休 | https://www.cnblogs.com/accordion/p/12457505.html实现代理服务,最常见的便是代理服务器代理相应的协议体请求源站,并将响应从...
  • websocket协议

    2021-03-22 20:14:04
    websocketwebsocket是html5中提出的一个协议规范,它允许浏览器与服务器中相互主动通信.http在讲websocket之前,我们必须先了解http协议http协议是基于tcp实现的协议,它的请求步骤为:浏览器与服务器建立tcp协议浏览器...
  • 随着HTML5WebSocket技术的日益成熟与普及,我们...对Socket Server的要求我们可以尝试让Socket Server透明地支持WebSocket客户端,所谓透明的意思是,服务端开发人员不用关心客户端究竟是什么类型,而是可以统一的...
  • 1,概念:http是目前应用最广泛的一个网络传输协议,是属于网络应用层的面向对象的协议. 1.1,HTTP1.1解决TCP3次握手4次挥手耗性能问题: 如果有大量的连接,每次在连接,关闭时都要经历3次握手,4次挥手,这很显然会造成...
  • webService、webSocketsocket、http之间的区别

    万次阅读 多人点赞 2018-12-27 15:39:53
    默认情况下,Websocket协议使用80端口;运行在TLS之上时,默认使用443端口。 WebSocket与HTTP的关系 相同点 都是一样基于TCP的,都是可靠性传输协议。 都是应用层协议。 不同点 WebSocket是双向...
  • websocket协议是基于TCP的应用层协议。按照图一左边用红色长方形扩起来的序列号逐条解释。10.12.100.89是客户端ip地址,47.111.170.187是服务端ip地址。 下方红色序号的数字对应图一左边红色框圈出来的序号。 1...
  • 【转】SocketWebSocket

    千次阅读 2018-09-04 16:13:10
    选择了 WebSocket 技术之后,不可避免的,我要将它其他协议以及技术做一下比较。最常见的,就是需要比较 WebSocket 与 HTTP、Socket 技术的异同。 WebSocket 是为了满足基于 Web 的日益增长的实时通信需求而产生...
  • WebSocket学习笔记 简介 WebSocket 是一种基于 TCP 的网络协议。在 2009 年诞生,于 ...在 WebSocket 中,浏览器服务器只需要完成一次握手,两者之间就可以建立持久性的连接,进行双向数据传输。 该协议的特点是:
  • 源码地址: github 建议阅读时间: 1 hour 在学习websocket中,查阅了大量的中英文资料,这里将成果分享给大家
  • websocket协议到tcp自定义协议,tcp分包与粘包,明文传输 徒手实现网络协议栈,请准备好环境,一起来写代码 服务器开发岗位面试必问的UDP技术点 WebSocket和Socket区别 可以把WebSocket想象成HTTP(应用层),HTTP...
  • websocketsocket.io比较与分析

    千次阅读 2020-04-07 20:30:01
    大家参与的项目里多少都会有web server与browser需要长连接互联的场景,当然我也是,之前没有进行太多方案的调研(比如深入理解通信协议和通用的一些解决方案),所以websocket就不假思索地直接用了,包括去年写的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,593
精华内容 10,637
关键字:

websocket协议和socket