websocket相关
来源:互联网 发布:网络布局要看什么书籍 编辑:程序博客网 时间:2024/06/04 18:13
原理:
在 WebSocket API,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送,改变了原有的B/S模式。
简单的举个例子吧,用目前应用比较广泛的PHP生命周期来解释。
1) HTTP的生命周期通过Request来界定,也就是一个Request 一个Response,那么在HTTP1.0中,这次HTTP请求就结束了。
在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。
但是请记住 Request = Response , 在HTTP中永远是这样,也就是说一个request只能有一个response。而且这个response也是被动的,不能主动发起。
在握手阶段是一样的
首先我们来看个典型的Websocket握手(借用Wikipedia的。。)
GET /chat HTTP/1.1Host: server.example.comUpgrade: websocketConnection: UpgradeSec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==Sec-WebSocket-Protocol: chat, superchatSec-WebSocket-Version: 13Origin: http://example.com
Upgrade: websocketConnection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==Sec-WebSocket-Protocol: chat, superchatSec-WebSocket-Version: 13
然后,Sec_WebSocket-Protocol 是一个用户定义的字符串,用来区分同URL下,不同的服务所需要的协议。简单理解:今晚我要服务A,别搞错啦~
最后,Sec-WebSocket-Version 是告诉服务器所使用的Websocket Draft(协议版本),在最初的时候,Websocket协议还在 Draft 阶段,各种奇奇怪怪的协议都有,而且还有很多期奇奇怪怪不同的东西,什么Firefox和Chrome用的不是一个版本之类的,当初Websocket协议太多可是一个大难题。
然后服务器会返回下列东西,表示已经接受到请求, 成功建立Websocket啦!
HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=Sec-WebSocket-Protocol: chat
Upgrade: websocketConnection: Upgrade
然后,Sec-WebSocket-Accept 这个则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key。服务器:好啦好啦,知道啦,给你看我的ID CARD来证明行了吧。。
后面的,Sec-WebSocket-Protocol 则是表示最终使用的协议。
至此,HTTP已经完成它所有工作了,接下来就是完全按照Websocket协议进行了。
具体的协议就不在这阐述了。
实现:
// 创建一个Socket实例
var socket = new WebSocket('ws://localhost:8080');
// 打开Socket
socket.onopen = function(event) {
// 发送一个初始化消息
socket.send('I am the client and I\'m listening!');
// 监听消息
socket.onmessage = function(event) {
console.log('Client received a message',event);
};
// 监听Socket的关闭
socket.onclose = function(event) {
console.log('Client notified socket has closed',event);
};
// 关闭Socket....
//socket.close()
};
socket.io的实现:
Socket.io是node的API 使用socket.io,其前后端句法是一致的,即通过socket.emit()来激发一个事件,通过socket.on()来侦听和处理对应事件。前端要引入socket.io.js而且首先要创建 var socket = io.connect实例,然后通过socket监听一些事件,从而对后端传过来的消息进行回应。
varsocket=io.connect(),
button=document.getElementById('btn');//与服务器进行连接
button.onclick=function(){
socket.emit('foo','hello');//发送一个名为foo的事件,并且传递一个字符串数据‘hello’
}
//服务器及页面响应部分
var express =require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);//引入socket.io模块并绑定到服务器
app.use('/',express.static(__dirname + '/www'));
server.listen(8001);
//socket部分
io.on('connection',function(socket) {
//接收并处理客户端发送的foo事件
socket.on('foo', function(data) {
//将消息输出到控制台
console.log(data);
})
});
- websocket相关
- WebSocket相关知识
- websocket相关技术比较
- Android webSocket 相关
- WebSocket-01 概念以及相关
- Node.js websocket 聊天室 相关资料
- 微信小程序WebSocket相关问题说明
- WebSocket
- WebSocket
- WebSocket
- websocket
- WebSocket
- WebSocket
- WebSocket
- WebSocket
- websocket
- websocket
- WebSocket
- http://ambitiongold.blog.163.com/blog/static/1840165522012921103511610/
- ubuntu中vi编辑器的使用
- HDU-5053-the Sum of Cube【打表】
- MySQL执行计划解读 转他人文章
- 浅析RPC
- websocket相关
- IOS树视图学习总结
- SDUT2139图结构练习——BFS——从起始点到目标点的最短步数
- 36.在Ubuntu上打造方便好用的Python开发环境
- splay模板
- 设计模式之命令模式(Command Pattern)
- JSP/SERVLET入门教程--Servlet 使用入门
- 单点登录SSO
- For You