一、WebSocket简介

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

二、WebSocket 通信原理

为了实现 WebSocket 通信,在 HTTP 连接建立之后,需要完成一 次“握手”(Handshaking)的步骤。

握手·请求

为了实现 WebSocket 通信,需要用到 HTTP 的 Upgrade 首部字 段,告知服务器通信协议发生改变,以达到握手的目的。

请求.jpg

Sec-WebSocket-Key 字段内记录着握手过程中必不可少的键值。 Sec-WebSocket-Protocol 字段内记录使用的子协议。 子协议按 WebSocket 协议标准在连接分开使用时,定义那些连接 的名称。

177 握手·响应

对于之前的请求,返回状态码 101 Switching Protocols 的响应。

响应.jpg

Sec-WebSocket-Accept 的字段值是由握手请求中的 SecWebSocket-Key 的字段值生成的。 成功握手确立 WebSocket 连接之后,通信时不再使用 HTTP 的数 据帧,而采用 WebSocket 独立的数据帧。

成功握手确立 WebSocket 连接之后,通信时不再使用 HTTP 的数 据帧,而采用 WebSocket 独立的数据帧。

通信原理图.jpg

JavaScript 可调用“The WebSocket API”,以下为调用 WebSocket API,每 50ms 发送一次数据的实例。

var socket = new WebSocket('ws://game.example.com:12010/updates');

socket.onopen = function () {

setInterval(function() {

if (socket.bufferedAmount == 0)

socket.send(getUpdateData());

}, 50);

};

c语言socket全双工通信,使用WebSocket进行全双工通信相关推荐

  1. c语言实现ftp网络应用程序,使用C语言socket实现windows pc与ftp服务器通信---socket实现ftp客户端...

    code // Client.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include #include #include #pra ...

  2. 【小白入门】Socket和webSocket入门 这一篇就够了!用php的Socket自己实现简单webSocket服务器!

     这几天研究了下php实现webSocket的方法,网上查了不少博文,涉及到的知识点不少.但却非常值得学,因为这方面典型的应用场景非常的多,消息推送,聊天室,所有需要长连接的地方都会用到它.     ...

  3. C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)

    文章目录 名称 使用格式 功能参数描述 参数 sockfd addr addrlen 返回值 示例 man 2 文档中的accept解释 错误处理 名称 accept() 接收一个套接字中已建立的连接 ...

  4. php winform通信,C# Winform 通过Socket实现客户端和服务端TCP通信

    操作界面如下: 1.声明Socket 第一个参数:寻址方式,第二个参数:传输数据的方式,第三个参数:通信协议 Socket socket = new Socket(AddressFamily.Inte ...

  5. Java语言Socket接口用法详解

    Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...

  6. c语言socket面试题,【C++工程师面试宝典】学习说明_互联网校招面试真题面经汇总_牛客网...

    ● 请你讲述一下互斥锁(mutex)机制,以及互斥锁和读写锁的区别 参考回答: 1.互斥锁和读写锁区别: 互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象.当获取锁操作失败时,线程会 ...

  7. c语言socket通讯和进行进行大文件分片传输

    c语言socket通讯和进行进行大文件分片传输 server端代码和client端代码 在windows上创建Cygwing工程11socket-server,创建完成后启动工程看不到效果,必须放到l ...

  8. SpringBoot(23) 集成socket.io服务端和客户端实现通信

    一.前言 websocket和socket.io区别? websocket 一种让客户端和服务器之间能进行双向实时通信的技术 使用时,虽然主流浏览器都已经支持,但仍然可能有不兼容的情况 适合用于cli ...

  9. C语言 socket编程实例

    C语言 socket编程实例 一. 面向连接的流式套接字 C/S 例子 二. 非阻塞的多人聊天服务器端例子 三. 简单的 IPv6 UDP socket编程 四.使用wireshark抓包分析tcp协 ...

最新文章

  1. ASM3.0学习(二)
  2. etcd集群搭建(高可用)
  3. 保留字(reserved field)是什么意思?
  4. 2017.9.28 约数研究 思考记录
  5. 2017.8.8 魔兽地图DotR 思考记录
  6. 完美解决doc、docx格式word转换为Html
  7. 开发用到的小功能、功能、网站等
  8. 运营小实践 -- 借助大数据平台刻画虎牙直播APP人群画像
  9. 关于JS按钮倒计时禁用的小Demo
  10. chromium目录下各个dll的作用
  11. 实现手机蓝牙解锁电脑_手机版和电脑版微信多开的实现方法
  12. 阿里云设置登录掩码错误无法登录
  13. 罗技推出可蓝牙连接的5.1环绕立体声扬声器
  14. 动态等待转圈效果(HTML、CSS、JS)
  15. MES与设备层的集成
  16. 鸿蒙系统平板界面,首发预装鸿蒙OS!华为MatePad Pro 2系统界面曝光
  17. Java中的.length与.length()
  18. linux操作系统理解-IPC
  19. python树结构输出到excel_【IT专家】使用Excel电子表格表示树层次结构,以便Python CSV reader轻松解析?...
  20. Mysql 列修改语句alter/changer/modify

热门文章

  1. sudo:/etc/sudoers 可被任何人写 解决方案
  2. 风靡全国的区块链产业园,为何叫好不叫座?
  3. 微信授权登陆步骤(微信客户端内)
  4. 谷歌开源同步定位与制图库Cartographer UBUNTU14.04安装方法
  5. 如何加强知识产权保护?
  6. spring boot之FreeMarker
  7. 杰理之蓝牙耳机PCB LAYOUT说明【篇】
  8. 对「马云谈996」的个人看法
  9. 数据库理论 02 SQL——基于《数据库系统概念》第七版
  10. Android设计模式之观察者模式在项目中的实际使用总结