热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WebSocket初探

WebSocket初探

应用层,主要解决如何包装数据:HTTP、FTP、Telnet等。其中,HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。所以是 短连接 。相对而言,socket连接是 长连接 ,两端一旦建立连接将不会主动断掉。但由于各种环境因素可能会断开,所以当一个socket连接中没有数据传输时,为了维持连接需要发送 心跳消息

传输层,主要解决数据如何在网络中传输:TCP协议。

网络层,主要解决数据如何在网络中传输:IP协议。

心跳消息(Heartbeat Message):是一种发送源发送到接收方的消息,这种消息可以让接收方确定发送源是否以及何时出现故障或终止。常用于高可用性或容错处理的目的。

socket是对TCP/IP协议的封装和应用,本身 并不是协议 而是一个调用接口(API) ,通过socket,我们才能使用TCP/IP协议。

“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供 程序员 做网络开发所用的接口,这就是Socket编程接口。”

TCP连接的三次握手和四次分手:

来自网络的流程图:

WebSocket初探

TCP与UDP的区别:

  • TCP是面向连接的,保证连接的可靠性;
  • UDP在传送数据之前并不与对方建立连接,对收到的数据也不发送确认信号,是无连接的、不可靠的数据传输协议。
  • MSN采用TCP协议,QQ采用UDP,所以后者更快一些。

2.利用Socket建立网络连接的步骤

ClientSocket,ServerSocket

套接字之间的连接步骤:

  • 服务器监听:处于等待客户端连接请求的状态,实时监控网络状态。
  • 客户端请求:ClientSocket必须首先描述它要连接的ServerSocket,指出ServerSocket的地址和端口号,然后提出连接请求。
  • 连接确认:当ServerSocket接收到ClientSocket的连接请求时,就响应请求,建立一个新的线程,把ServerSocket的描述发给ClientSocket,一旦Client确认了此描述,双方就正式建立连接。而ServerSocket继续处于监听状态,继续接收其他ClientSocket的连接请求。

3.WebSocket

WebSocket是HTML5开始提供的一种浏览器和服务器间进行 全双工通讯 的网络技术。在WebSocket API中,浏览器和服务器只需要做一个握手的动作,就可以形成一条快速通道,二者就可以直接进行数据互传。

全双工:通讯传输的术语。指可以同时(瞬时)进行信号的双向传输。与之相对,单工就是只允许甲方向乙方传送信息,而乙方不能向甲方传送。

面对这种情况,HTML5定义了WebSocket协议,节省服务器资源和带宽,并达到实时通讯。

具体规范见 官网的RFC 6455文档 及 翻译版本 。

客户端的WebSocket对象共绑定了四个事件:

  • onopen:连接建立时触发;
  • onmessage:收到服务器消息时触发;
  • onerror:连接出错时触发;
  • onclose:连接关闭时触发。

socket与websocket的差别:

  • socket是更底层。
  • websocket是在普通的socket的基础上添加一些framing和一次http兼容的握手机制。这个http兼容的握手机制只是为了允许websocket在webserver运行的同一个端口上进行连接,但一旦连接建立,webserver就不再loop中了。

4.IM即时聊天的解决方案

IM的主流技术:

  • http polling:即轮询,是在特定的时间间隔(如1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客户端的浏览器。缺点是,浏览器不断向服务器发出请求,HTTP request的header是很长的,里面包含的数据可能很小,占用带宽和服务器资源。

来自网络的流程图:

WebSocket初探
  • http long-polling:即长轮询,又称comet。当server端没有数据推送到client端时,请求不会立即返回,而是被server端hold住,直到有数据发送,或者超时,才发送响应。client收到响应之后,立即重新发起http请求。

来自网络的流程图:

WebSocket初探
  • socket长连接。

Socket开源框架: CocoaAsyncSocket , socketio/socket.io-client-swift

WebSocket开源框架: facebook/SocketRocket , tidwall/SwiftWebSocket

UI方面开源框架: JSQMessagesViewController

第三方SDK集成:

  • 前期:环信,容联云(集成了聊天、视频、语音)。
  • Firebase: https://firebase.google.com/(已墙。。bye。。。)
  • 野狗: https://www.wilddog.com/(小团队,坐标望京)
  • 微信用的WebRTC。

其他协议:

  • MQTT:是一个客户端服务端架构的发布/订阅模式的消息传输协议。知名的IM移动app,应该都是用的这个。听说XMPP到一定并发量有天坑。。?
  • XMPP:是一种以XML为基础的开放式即时通信协议。

5.iOS端与web端通过socket建立通讯

web端:使用的是nodejs的socket.io。

iOS端:使用的是 socket.io的Swift版本 。

5.1 web端配置

  • 安装node.js: https://nodejs.org/en/
  • 安装node.js的web框架express: npm install —save express@4.15.2
  • 创建index.js并添加如下代码:
var app = require('express')();
var http = require('http').Server(app);

app.get('/', function(req, res){
  res.send('

Hello world

'); }); http.listen(3000, function(){ console.log('listening on *:3000'); });
  • 运行 node index.js ,terminal显示正在监听3000端口。

    WebSocket初探
  • 浏览器访问 http://localhost:3000。

    WebSocket初探
  • 添加显示对话窗口的html页面。


  
    
    
  
  
    
    
      
    
  

  • 安装socket.io: npm install —save socket.io
  • 将socket相关的逻辑已更新到sample的 index.jsindex.html 中。

  • 最终,两个浏览器窗口之间,可以进行实时接发消息,web端配置就完成了。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 我们


推荐阅读
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 1、DashAPI文档Dash是一个API文档浏览器,使用户可以使用离线功能即时搜索无数API。程序员使用Dash可访问iOS,MacOS, ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • Istio是一个用来连接、管理和保护微服务的开放平台。Istio提供一种简单的方式来为已部署的服务建 ... [详细]
author-avatar
手机用户2602906791
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有