HTML5 WebSocket技术使用详解

来源:脚本之家  责任编辑:小易  

普通的Ping功能,像图片Ping。只能单向通信。websocket支持全双工、跨域通信。如果你只的是这个的话,websocket是完全可以的。 之前有很多个朋友问了我用java结合websocket通信的问题。因此我特意录了一个视频。使用tomcat 的Servlet搭建WebSock

WebSocket

WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。

WebSockets是在一个(TCP)接口进行双向通信的技术,PUSH技术类型。同时WebSockets仍将基于W3C标准,目前为止Chrome和Safari的最新版本浏览器已经支持WebSockets了。 WebSockets可以替代Long Polling(PHP服务端推送技术),这是一个有趣的概念。 客

现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客服端的浏览器,这种方式有一个很大的弊端,就是会占用很多的带宽。

这东西还是比较好资源的 我推荐你看下webworker 这样就可以多线程开websocket 不过推荐websocket只有一个

最新的轮询效果是Comet – 用了AJAX。但这种技术虽然可达到全双工通信,但依然需要发出请求。

请问您的问题解决了么,我现在也面对一个问题,就是服务器完全是socket,不过是纯c++编写的,现在我想用html5+js进行连接交互,但是好像没能成功,希望您能分享一下这方面的解决方法可以么,万分感谢!

使用WebSocket,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道,两者之间就直接可以数据互相传送。而且它为我们实现即时服务带来了两大好处:

启动php sever服务 client新建一个websocket对象连接后端 client发送数据给后端 服务器接受数据后返回数据 client接收到返回数据继续下一步 我这边有个聊天室的demo就是这样做的,很简答

节省资源:互相沟通的Header是很小的-大概只有 2 Bytes。

和田籽料指的是山上被冲入河流里面的和田玉。外形基本和鹅卵石一样。并且因为水的冲击,表面密度差的地方被氧化成颜色较深的表皮。并伴有毛细孔。原来的和田玉大家最喜欢的是白度,也就是以白为好。但是现在因为假货泛滥,所以在玉雕时候保留毛细孔和一部分表皮成为籽料的象征。结果到现在就发展成挂皮红皮白肉值钱。原来的和田玉可是君子无暇,白玉无皮才是美。现在专门玩皮的也不少。还有就是雕工也很重要。苏工海工都是国内顶尖的。三分玉七分工。就是料子差点经过大师的巧妙设计,也会升值不少。不过图中这个玉专从料子角度来说玉青带脏,而且挖的就剩一个壳子。这种料子在市场不超过一千块钱。行家都不会玩这种。也就是古董的身份带来的价值

推送信息:不需要客户端请求,服务器可以主动传送数据给客户端。

socket.io

圆脸女生适合留什么样的发型和刘海?Hi大家好,我是何有强圆脸的女孩子留发型还真的很好留,圆脸的你看上去非常的可爱,下面我们来看圆脸的明星都留什么样的发型吧!赵丽颖的短发还真心不错,很适合圆脸的女孩子剪这款发型,圆脸的女孩子剪的时候不要剪的太短的短发造型,锁骨发型是最合适的。剪了这款短发造型还有一个好处就是,天气热的的时候你还可以扎起来,这样的话就不会热了,如果你剪的很短的话,就扎不起来了。长头发扎丸子头发型也是很好看的,大家可以看一下下面这张发型图片,所以圆脸的你还怕找不到适合的发型吗?不过不很很建议圆脸的女孩子剪刘海,特别是齐刘海,剪了之后非常的不好看,会显得脸很大,傻傻的感觉。最好的方法就

Socket.IO是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。

我觉得任何驾校遇到这种情况都会扣钱的,只是没约科一和约了科一扣钱的多少而已。因为报名的时候肯定学员和驾校签订了学车合同,只要不是驾校的原因,学员中途不学了,那就违约了,扣的钱那叫违约金。(虽然我也认为不合理,驾校的损失大致就是浪费几个管理人员录入资料的时间,还有就是学员卡的成本费用以及科目一理论的书本费用)另外,如果真的自己去正规医院,正常获得的体检报告,交警应该是无权干涉学员学车的,因为医院出示的身体条件证明就证明了可以学车。

socket.io的特点

您好,感谢邀请,飘窗铺了大理石之后还是可以做防护栏的。不知道你现在是装好了大理石台面了没有,具体可以有两种操作方法:1、如果你们家的飘窗原本就有防护栏,但你想要铺大理石,你可以先找人将栏杆先折除,等石材安好后,开好孔再将栏杆装上去,这样做出来最美观2.如果你觉得拆除栏杆麻烦,也可以不取栏杆,直接装大理石台,在有栏杆处开孔装好后,背后再补一小块石材,这样业主要省事一些。但是有一点不足的就是这样石材表面就有接缝了,美观要差一些。关注我【轻松装上海站】,了解更多装修知识,装修经验,市场黑幕~

易用性:socket.io封装了服务端和客户端,使用起来非常简单方便。

跨平台:socket.io支持跨平台,这就意味着你有了更多的选择,可以在自己喜欢的平台下开发实时应用。

自适应:它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,非常方便和人性化,而且支持的浏览器最低达IE5.5。

WebSocket 安装部署

npm install socket.io

服务监听

socket.io的服务端启动非常的简单,引用socket.io模块。

var io = require('socket.io');

然后调用listen函数,传入监听的端口号,开始服务监听。启用了80端口用于测试:

var io = require('socket.io')(80);

注册事件

io.on('connection', function (socket) { socket.on('disconnect', function () { }) })

connection事件在客户端成功连接到服务端时触发,有了这个事件,我们可以随时掌握用户连接到服务端的信息。

当客户端成功建立连接时,在connection事件的回调函数中,我们还是可以为socket注册一些常用的事件,如:disconnect事件,它在客户端连接断开是触发,这时候我就知道用户已经离开了。

WebSocket 启动服务

目前为止,我们已经搭建好了一个最简单的socket服务器,为了在浏览器中能够访问到我们的服务,我们还需要在服务端搭建一个简单的web服务器,让浏览器能够访问我们的客户端页面。

为了便捷,我们选用node.js中常用的express框架来实现web服务,示例如下:

var express = require('express'); var app = express(); app.get('/', function (req, res) { res.status(200).send('成功连接!') }); var server = require('http').createServer(app); var io = require('socket.io')(server); io.on('connection', function (socket) { }); server.listen(80);

WebSocket 客户端引用

服务端构建完毕,下面看一看客户端应该如何使用。

服务端运行后会在根目录动态生成socket.io的客户端js文件,客户端可以通过固定路径/socket.io/socket.io.js添加引用。

首先添加网页index.html,并在网页中引用客户端js文件:

<script src="http://picc.zgxue.com/https://cdn.bootcss.com/socket.io/2.0.2/socket.io.js"></script>

WebSocket 连接服务

当客户端成功加载socket.io客户端文件后会获取到一个全局对象io,我们将通过io.connect函数来向服务端发起连接请求。

var socket = io.connect('/'); socket.on('connect',function(){ //连接成功 }); socket.on('disconnect',function(data){ //连接断开 });

connect函数可以接受一个url参数,url可以socket服务的http完整地址,也可以是相对路径,如果省略则表示默认连接当前路径。与服务端类似,客户端也需要注册相应的事件来捕获信息,不同的是客户端连接成功的事件是connect。

了解了客户端如何使用,下面我们创建网页index.html,并添加如下内容(保存):

<html> <head> <script src="http://picc.zgxue.com/https://cdn.bootcss.com/socket.io/2.0.2/socket.io.js"></script> <script> window.onload = function(){ var socket = io.connect('/'); socket.on('connect',function(){ document.write('连接成功!'); }); }; </script> </head> <body> </body> </html>

页面添加完毕还要记得在服务端app.js中为它添加路由,让我们可以访问测试网页:

app.get('/index',function(req,res){ res.sendFile('index.html',{root:__dirname}); });

WebSocket 实时通讯

服务端和客户端都构建完毕了,下面开始发送消息。

当我们成功建立连接后,我们可以通过socket对象的send函数来互相发送消息,示例-客户端向服务端发送消息(index.html):

var socket = io.connect('/'); socket.on('connect',function(){ //客户端连接成功后发送消息'hello world!' socket.send('hello world!'); }); socket.on('message',function(data){ alert(data); });

连接成功后,我们向服务端发送消息hello world!,还为socket注册了message事件,它是send函数对应的接收消息的事件,当服务端向客户端send消息时,我们就可以在message事件中接收到发送过来的消息。

服务端向客户端发送消息也可以通过send的方式,示例 - 服务端向客户端发送消息(app.js):

var io = require('scoket.io'); io.on('connection', function (socket) { socket.send('Hello World!'); socket.on('message', function (data) { console.log(data); }) });

与客户端相同,服务端也需要为socket注册message事件来接收客户端发送过来的消息。

WebSocket 发送信息

socket.io既然是用来实现通讯的,那么如何发送、接收信息才是根本。

在socket.io中,emit函数用于发送数据,我们使用send的方式实现了信息的互发,其实send函数只是emit的封装,实际上还是使用了emit,且看send函数是如何实现的:

function send(){ var args = toArray(arguments); args.unshift('message'); this.emit.apply(this, args); return this; }

在send函数中,获取到原来的参数,并在原来的基础上插入了一个参数message,然后调用了emit函数。通过send函数的实现,我们也学会了emit函数的用法,它有多个参数,第一个参数是事件名称,在接收端注册该事件就可以接收到发送过去的信息,事件名称可以自由定义,在不同的场景下,我们可以定义不同的事件来接收消息。第二个参数才是发送的数据。了解清楚了工作原理,下面来将send替换成emit函数发送信息:

//app.js io.on('connection',function(socket){ socket.emit('message','连接成功!'); socket.on('message',function(data){ }); });

WebSocket 服务端事件

事件监听是实现通讯的基础,因此充分了解socket.io的事件,学习如何在正确的时候使用它们至关重要。在一些关键的的状态下,socket.io可以注册相应的事件,通过事件监听,我们可以在这些事件中作出反应,常用的事件如下:

connection——客户端成功连接到服务器。

message——捕获客户端send信息。。

disconnect——客户端断开连接。

error——发生错误。

WebSocket 客户端

较服务端而言,客户端提供更多的监听事件,在实时应用中,我们可以为这些事件注册监听并作出反应,例如:connect提示用户连接成功,disconnect时提示用户停止服务等等。

connection——成功连接到服务器。

connecting——正在连接。

disconnect——断开连接。

connect_failed——连接失败。

error——连接错误。

message——监听服务端send的信息。

reconnect_failed——重新连接失败。

reconnect——重新连接成功。

reconnecting——正在重连。

那么客户端socket发起连接时的顺序是怎么样的呢?当第一次连接时,事件触发顺序为: connecting → connect;

当失去连接时,事件触发顺序为:disconnect → reconnecting → connecting → reconnect → connect。

WebSocket 命名空间

命名空间着实是一个非常实用好用的功能。我们可以通过命名空间,划分出不同的房间,在房间里的广播和通信都不会影响到房间以外的客户端。

那么如何创建房间呢?在服务端,通过of("")的方式来划分新的命名空间:

io.of('chat').on('connection',function(socket){ });

示例中,我们创建一个名为chat的房间,客户端可以通过如下方式连接到指定的房间:

var socket = io.connect('/chat');

虽然连接到指定的房间,但是我们也可以在服务端操作,自由的进出房间:

socket.join('chat');//进入chat房间 socket.leave('chat');//离开chat房间

WebSocket 广播消息

在实时应用中,广播是一个不可或缺的功能,socket.io提供两种服务端广播方式。

第一种广播方式可以称之为'全局广播',顾名思义,全局广播就是所有连接到服务器的客户端都会受到广播的信息:

socket.broadcast.emit('DATA',data);

但是,在实际应用场景中,我们很多时候并不需要所有用户都收到广播信息,有的广播信息只发送给一部分客户端,比如某个房间里面的用户,那么可以使用如下方式:

socket.broadcast.to('chat').emit('DATA',data);

中间件

socket.io提供中间件功能,我们可以通过中间件来对请求进行预处理,比如身份验证:

io.use(function(socket, next){ if (socket.request.headers.cookie) return next(); next(new Error('Authentication error')); });

示例中展示了通过中间件进行身份验证,当没有cookie的时候抛出异常。

传递参数

在很多应用场景中,客户端发起连接请求时都需要传递参数,这些参数可能是身份验证、初始化设置等等,那么socket.io发起连接时如何传递参数呢?

var socket = io.connect('/');

由于connect函数发起连接的参数是一个url,你可能会想到把参数拼接到url上,如http://xxxx?xx=xxxx,但是很遗憾这样是行不通的,我们可以通过这样的方式来传递参数:

var socket = io.connect('/',{ _query:'sid=123456' });

在服务端可以这样获取到传递的参数:

io.use(function(socket){ var query = socket.request._query; var sid = query.sid; });

客户端传递的参数已经被解析成了一个json对象,这个对象就是_query。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

HTML5 Web Socket和Web Worker的区别以及使用方法

一、WEB SOCKET

1、Web Socket是一种协议、本质上和http、tcp一样、协议是用来说明数据是如何传输的,写过一个小的在线聊天使用了socket.io、之后总结这个项目

2、Web Socket的前缀有两种:(1)ws:// 不是加密的、 (2)wss:// 是加密的

3、客户端和服务端进行Web Socket交互的方式也可以理解为“http握手 tcp数据传输”的方式

(1)浏览器(支持Websocket的浏览器)像HTTP一样、发起一个请求、然后等待服务端的响应

(2)服务器返回握手响应、告诉浏览器请将后续的数据按照websocket制定的数据格式传过来

(3)浏览器和服务器的socket连接不中断、此时这个连接和http不同的是它是双工的了

(4)浏览器和服务器有任何需要传递的数据的时候使用这个长连接进行数据传递

HTTP握手:是因为浏览器和服务器在建立长连接的握手过程是按照HTTP1.1的协议发送的、有Request、Request Header、 Response、 Response Header、但是不同的是Header里面的字段是有特定含义的

TCP传输: 主要体现在建立长连接后、浏览器是可以给服务器发送数据、服务器也可以给浏览器发送请求的、当然它的数据格式并不是自己定义的、是在要传输的数据外层有ws协议规定的外层包的

4、数据传输过程:websocket的数据传输形式是:frame、比如会将一条消息分为几个frame、按照先后顺序传输出去、这样做会有几个好处

(1)大数据的传输可以分片传输、不用考虑到数据大小导致的长度标志位不足够的情况

(2)和http的chunk一样、可以边生成数据边传递消息、即提高传输效率

5、客户端使用Web Socket的语法:JavaScript、服务端:多种web框架支持

二、WEB WORKER

1、当在 HTML 页面中执行脚本时、页面的状态是不可响应的、直到脚本已完成、而Web Worker 是运行在后台的 JavaScript、独立于其他脚本、不会影响页面的性能、您可以继续做任何愿意做的事情:点击、选取内容等等、而此时 Web Worker 在后台运行

除了DOM操作之外、理论上任何JS脚本任务都可放入worker中执行;语法上的*、则是不能跨域访问JS、worker常用于需要消耗大量时间和CPU资源的复杂计算、以换来前台用户操作的友好型;换句话说、从用户体验上看、提高了服务性能

2、Web Worker使用:(当我们创建 Web Worker 对象后、它会继续监听消息(即使在外部脚本完成之后)直到其被终止为止)

(1)通过向 Web Worker 添加一个 "onmessage" 事件*来获取接受到的消息

(2)发送消息:postMessage()

(3)终止 Web Worker、并释放浏览器/计算机资源: terminate()

HTML5 WebSocket如何实现消息推送?

HTML5中WebSocket实现消息推送的方法:

1、创建服务器连接:

var socket = new WebSockect('ws://localhost:8080');

2、增加监控事件,当触发open方法时,建立连接准备发送消息。

socket.addEventListener('open', function(){

console.log("Connection established, handle with event");

});

socket.onopen = function(){

console.log("Connection established, handle with function");

};

3、调用方法发送消息:

socket.send("Somme Message to send to the server");

4、关闭连接

socket.close();

HTML5的WebSocket是什么原理

与http不一样的地方:

发起请求带参:

Upgrade: websocket

Connection: Upgrade

在发起websocket协议的时候通过这两个参数告诉apache,nginx,发起的是websocket请求

发起请求带参数:

Sec-WebSocket-Key: 验证websocket

Sec-WebSocket-Protocol: 自定义字符串,区分请求服务器

Sec-WebSocket-Version: 服务器所使用的Websocket Draft协议版本

服务器接受到参数返回:

HTTP/1.1 101 Switching Protocols

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Accept: 服务器加密后返回参数 //【Sec-WebSocket-Accept 这个则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key】

Sec-WebSocket-Protocol: 自定义字符串,区分请求服务器

这是一次请求的原理

html5的websocket怎么建立udp连接

这个没有办法的,因为Websocket是基于TCP协议的。推荐使用WebRTC ,它是基于UDP协议的。

HTML5 websocket 能实现Ping功能吗

ping是icmp协议,socket是tcp协议。不在一个层

只能后台开启一个进程,执行ping命令,把结果通过websocket返回给页面

  • 本文相关:
  • php使用websocket示例详解
  • javascript websocket使用实例介绍(简明入门教程)
  • nginx反向代理websocket配置实例
  • python通过websocket与js客户端通信示例分析
  • 使用java和websocket实现网页聊天室实例代码
  • java后端tomcat实现websocket实例教程
  • android中使用websocket实现群聊和消息推送功能(不使用webview)
  • 让ie6也支持websocket采用flash封装实现
  • spring和websocket相结合实现消息的推送
  • 完美解决spring websocket自动断开连接再创建引发的问题
  • javascript之websocket技术详解
  • 浅析nodejs实现websocket的数据接收与发送
  • 微信小程序 websocket详解及应用
  • 使用swoole扩展php websocket示例
  • php中使用websocket详解
  • php+html5基于websocket实现聊天室的方法
  • 详解websocket+spring示例demo(已使用sockjs库)
  • c#实现websocket协议客户端和服务器websocket sharp组件实例解析
  • web2.0编程思想:16条法则
  • web移动端fixed布局的解决方案
  • web2.0的几个开源项目
  • 什么是web2.0?
  • web2.0色系
  • html5 websocket技术使用详解
  • web2.0中流行的设计元素:颜色
  • HTML5 Web Socket和Web Worker的区别以及使用方法
  • HTML5 WebSocket如何实现消息推送?
  • HTML5的WebSocket是什么原理
  • html5的websocket怎么建立udp连接
  • HTML5 websocket 能实现Ping功能吗
  • HTML5 websocket 能实现Ping功能吗
  • html5的websocket怎么在服务器端配置php
  • 一个html5页面怎么创建多个websocket
  • html5如何与普通的socket进行通讯
  • html5的websocket和php的socket分别完成客户端与服...
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved