socket.io入门原理

ievuzsv ievuzsv     2022-12-10     223

关键词:

1. Socket.IO原理

node.js提供了高效的服务端运行环境,但是由于浏览器端对HTML5的支持不一,为了兼容所有浏览器,提供卓越的实时的用户体验,并且为程序员提供客户端与服务端一致的编程体验,于是socket.io诞生。Socket.io将Websocket和轮询 (Polling)机制以及其它的实时通信方式封装成了通用的接口,并且在服务端实现了这些实时机制的相应代码。也就是说,Websocket仅仅是 Socket.io实现实时通信的一个子集。那么,Socket.io都实现了Polling中的那些通信机制呢?

 

WebSocket 

Adobe® Flash® Socket

AJAX long polling

AJAX multipart streaming

Forever Iframe

JSONP Polling

Adobe® Flash® Socket 大部分PC浏览器都支持的socket模式,不过是通过第三方嵌入到浏览器,不在W3C规范内,所以可能将逐步被淘汰,况且,大部分的手机浏览器都不支持这种模式。

 

AJAX long polling 这个很好理解,所有浏览器都支持这种方式,就是定时的向服务器发送请求,缺点是会给服务器带来压力并且出现信息更新不及时的现象。

 

AJAX multipart streaming 这是在XMLHttpRequest对象上使用某些浏览器(比如说Firefox)支持的multi-part标志。Ajax请求被发送给服务器端并保 持打开状态(挂起状态),每次需要向客户端发送信息,就寻找一个挂起的的http请求响应给客户端,并且所有的响应都会通过统一连接来写入。

 

var xhr = $.ajaxSettings.xhr();

xhr.multipart =true;

xhr.open(‘GET‘, ‘ajax‘, true);

xhr.onreadystatechange = function()

  if (xhr.readyState == 4)

    processEvents($.parseJSON(xhr.responseText));

  

;

xhr.send(null);

Forever Iframe (永存的Iframe)技术涉及了一个置于页面中的隐藏Iframe标签,该标签的src属性指向返回服务器端事件的servlet路径。 每次在事件到达时,servlet写入并刷新一个新的script标签,该标签内部带有JavaScript代码,iframe的内容被附加上这一 script标签,标签中的内容就会得到执行。这种方式的缺点是接和数据都是由浏览器通过HTML标签来处理的,因此你没有办法知道连接何时在哪一端已被 断开了,并且Iframe标签在浏览器中将被逐步取消使用。

 

JSONP Polling JSONP轮询基本上与HTTP轮询一样,不同之处则是JSONP可以发出跨域请求,详细请搜索查询jsonp的内容。

 

2. Socket.IO环境搭建

本次给大家带来两种使用Socket.IO的方法。

 

两种方法都需要安装JDK,JDK版本要求1.7以上,JDK安装方法就不说了,网上有很多

 

使用Node.js运行Socket.IO

首先我们需要下载Node.js并安装。

 

enter image description here

 

这次我下载的是9.2.0 Current版本。

 

enter image description here

 

我安装的目录是----- E:Program Files odejs这个目录是用来配置环境变量的。安装完成之后我们可以得到如下图这些文件。

 

enter image description here

 

这样我们还需要去配置环境变量。新建一个NODEJS_HOME=E:Program Files odejs。

 

enter image description here

 

在Path最后追加%NODEJS_HOME%

 

enter image description here

 

配置完成后我们验证一下node.js是否可用。打开CMD,输入node -v:

 

enter image description here

 

目前我们只是完成了node.js的安装。并无法使用socket.io,因为socket.io只是node.js下的一个模块,需要我们手动安装。

 

如何安装呢?很简单。打开CMD直接输入npm install socket.io就可以自动的从网上把socketio下载下来了。

 

enter image description here

 

至此我们就将环境搭建完成了

socket.io入门篇

...il/591b114bb1d4fe074099d9c9.html前言本篇介绍使用node.js模块组件socket.io实现一个非常非常简易的聊天案例。本系列文章不对socket.io历史背景做过多阐述,只会通过一个个的案例带领大家进入socket.io的殿堂,增进小伙伴在socket.io实际开发... 查看详情

socket.io入门篇

前言上篇我们介绍了socket.io基本使用方法,本篇我们继续深入了解socket.io中room(房间)的概念和使用。对于room的概念,你只需理解3个地方就可以:1.在不加入或指定room的情况下,socket.io会默认分配一个defaultroom2.同一room下的sock... 查看详情

socket.io入门篇

...mitcode.com/detail/5926e3a056fba70278bf2044.html前言上篇我们介绍了socket.io中room的概念和使用,本篇我们继续深入了解socket.io中namespace(命名空间)的概念和使用。对于namespace的概念只需理解3个地方:1.在不声明新的命名空间情况下,系... 查看详情

socket.io入门

...建一个chat-example文件夹,并建立一个package.json文件{"name":"socket-chat-example","version":"0.0.1","description":"myfirstsocket.ioapp","dependencies":{}}2 查看详情

socket.io入门,简易聊天室(代码片段)

...。所以我们需要一个可以由服务端主动发出的协议,即WebSocket。WebSocket是HTML5新增的一种通信协议,其特点是服务端可以主动向客户端推送信息,客户端也可以主动向服务端发送信息,是真正的双向平等对话,属于服务器推送技... 查看详情

socket.io快入入门案例

socket.io基本介绍创建一个nodejs项目步骤1:创建项目目录步骤2:初始化nodejs项目目录结构命令:npminit-f结果如下:在nodejs项目安装socket.io模块命令:npminstallsokcet.iosocket.io网站:https://socket.io/socket.io快速入门案例客户端:index.html&l... 查看详情

socket.io延伸

项目正好用到了即时通讯功能,于是研究到了webSocket技术,后来发现了可以在web、[Android]、[iOS]上同时使用的解决方案,那就是SocketIO。其实现原理啥的不做介绍了,直接贴上IOS项目可能会用到的一些资源。首先是官网:http://sock... 查看详情

Socket.io 多连接

】Socket.io多连接【英文标题】:Socket.iomultipleconnections【发布时间】:2016-09-1517:26:42【问题描述】:我还没有真正找到有关文档的奇怪问题。我认为这可能最终会成为“您不了解产品的工作原理”的简单案例,我希望有人可以填... 查看详情

Socket IO 将 TCP 套接字消息输出到网页

】SocketIO将TCP套接字消息输出到网页【英文标题】:SocketIOtooutputaTCPsocketmessagetoawebpage【发布时间】:2018-05-1415:53:02【问题描述】:我正在试验NodeJS和SocketIO。我在这里查看了Socket.IO入门指南:https://socket.io/get-started/chat/。代码如... 查看详情

如何配置 socket.io 来监听客户端

】如何配置socket.io来监听客户端【英文标题】:Howtoconfiguresocket.iotolistentoclientside【发布时间】:2020-06-2510:51:00【问题描述】:我是使用套接字的新手,并不完全了解它们的工作原理。当我加载我的网站时,我收到此错误,我只... 查看详情

简单的游戏循环 Socket.io + Node.js + Express

】简单的游戏循环Socket.io+Node.js+Express【英文标题】:SimpleGameLoopSocket.io+Node.js+Express【发布时间】:2018-11-1805:08:55【问题描述】:我试图用简单的物理原理制作一个游戏,你可以在其中跳来跳去,看看其他玩家使用node.js、socket.io... 查看详情

/socket.io/socket.io.js 中不提供 Socket.io

】/socket.io/socket.io.js中不提供Socket.io【英文标题】:Socket.ioisnotservedin/socket.io/socket.io.js【发布时间】:2012-12-2420:46:28【问题描述】:我已在此处阅读有关我在node.js中的问题的答案,但我的问题仍然存在。在服务器中使用socket.io,... 查看详情

Express.js 'socket.io/socket.io.js 404'

】Express.js\\\'socket.io/socket.io.js404\\\'【英文标题】:Express.js\'socket.io/socket.io.js404\'Express.js\'socket.io/socket.io.js404\'【发布时间】:2017-02-0207:36:19【问题描述】:我正在尝试在使用ExpressJS的网站http://clickthebutton.herokuapp.com上合并实 查看详情

socket.io中文手册socket.io中文文档

socket.io中文手册,socket.io中文文档转载于:http://www.cnblogs.com/xiezhengcai/p/3956401.html服务端io.on(‘connection’,function(socket));//监听客户端连接,回调函数会传递本次连接的socketio.sockets.emit(‘String’,data);//给所有客户端广播消息io.socket 查看详情

socket.io中文手册socket.io中文文档

socket.io中文手册,socket.io中文文档转载于:http://www.cnblogs.com/xiezhengcai/p/3956401.html服务端io.on(‘connection’,function(socket));//监听客户端连接,回调函数会传递本次连接的socketio.sockets.emit(‘String’,data);//给所有客户端广播消息io.socket 查看详情

socket.io中文手册socket.io中文文档

socket.io中文手册,socket.io中文文档转载于:http://www.cnblogs.com/xiezhengcai/p/3956401.html服务端io.on(‘connection’,function(socket));//监听客户端连接,回调函数会传递本次连接的socketio.sockets.emit(‘String’,data);//给所有客户端广播消息io.socket 查看详情

未找到 Socket.io.js(node.js + express + socket.io)

】未找到Socket.io.js(node.js+express+socket.io)【英文标题】:Socket.io.jsnotfound(node.js+express+socket.io)【发布时间】:2014-10-2022:06:51【问题描述】:我一直在检查其他相关答案,例如:node.js/socket.io/socket.io.jsnotfoundSocket.ionotbeingservedbyNode.j... 查看详情

使用androidnodejs和socket.io创建一个实时聊天应用程序(代码片段)

介绍WebSockets是非常漂亮的工具,它允许我们在现代Web应用程序中建立实时通信。事实上,这个机制非常强大,它被用来构建不同类型的应用程序,如实时聊天或通知系统等。在本文中,我们将向您展示如何使... 查看详情