websocket基本概念
(1)websocket 协议 与 http协议
websocket 协议,双工通道 socket连接不断开
http 协议 ,只能请求响应 (用户主动获取) socket连接断开
都是基于socket
---- 客户端都是浏览器
(2)轮询
一般用户量少的 都是用 websocket来做即时通讯
轮询 --- 一直发请求,定死的,2秒钟取一次
长轮询 --- 请求之后,没有新消息,夯住,30秒之内没有新消息,断开
重新请求,如果有新消息,立刻返回消息
(3) ws 协议小例
创建 socket 服务端
import socket
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sock.bind(('127.0.0.1',8002))
sock.listen(5)
conn,addr = sock.accept()
data = conn.recv(1024)
print(data)
创建 scoket 客户端
<script type="text/javascript">
var socket = new WebSocket("ws://127.0.0.1:8002")
// 浏览器 会立即创建一个 socket对象 ,连接
</script>
</body>
但是服务端 必须返回固定格式的内容给浏览器 ,才能保证 正常的连接
【握手信息】魔法字符串
(5) WebSocket协议是基于TCP的一种新的协议。
WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符。
它实现了浏览器与服务器全双工(full-duplex)通信。
其本质是保持TCP连接,在浏览器和服务端通过Socket进行通信。
请求和响应的【握手】信息需要遵循规则:
从请求【握手】信息中提取 Sec-WebSocket-Key
利用magic_string 和 Sec-WebSocket-Key 进行hmac1加密,再进行base64加密
将加密结果响应给客户端
注:magic string为:258EAFA5-E914-47DA-95CA-C5AB0DC85B11
(6) tornado 实现 websocket
Tornado是一个支持WebSocket的优秀框架,当然Tornado内部封装功能更加完整。
(7)客户端和服务端传输数据时,需要对数据进行【封包】和【解包】
客户端的JavaScript类库已经封装【封包】和【解包】过程,但Socket服务端需要手动实现。
第一步:获取客户端发送的数据【解包】 Payload
第二步:向客户端发送数据【封包】
websocket基本概念的更多相关文章
- 4.websocket基本概念
websockey的模式就是在于当前端向后端发送请求创建一个websocket链连接之后,连接默认不断开,前端和服务端就维护了一个连接,前端可以通过连接给服务端发消息,服务端也可以通过连接给前端发消息 ...
- 8.websocket slef概念
self代表当前用户客户端与服务端的连接对象,比如两客户端发来了两个连接,我们可以把两个连接放在一起 # 定义全局变量 CONN_List = [] class LiveConsumer(Websoc ...
- 利用html 5 websocket做个山寨版web聊天室(手写C#服务器)
在之前的博客中提到过看到html5 的websocket后很感兴趣,终于可以摆脱长轮询(websocket之前的实现方式可以看看Developer Works上的一篇文章,有简单提到,同时也说了web ...
- websocket 初识
websocket 初识 前言 其实很早就知道了 websocket 这个概念了,像现在大火的直播等使用的就是 websocket.之前找爬虫工作,对面问我爬过 websocket 网站没,很汗颜,那 ...
- ajax与websocket的区别以及websocket常用使用方式
笔者近期在公司的项目中渐渐的接触了一些比较高级的业务逻辑处理,其中比较有意思的地方就是前端接受后台给与的推送问题. 一般前端与后端的交互主要是使用ajax进行异步操作调用交互,比较有趣的是这种交互方式 ...
- 实现websocket
转:http://www.cnblogs.com/dolphinX/p/3462898.html 在之前的博客中提到过看到html5 的websocket后很感兴趣,终于可以摆脱长轮询(websock ...
- 国内最全的Spring Boot系列之二
历史文章 <国内最全的Spring Boot系列之一> 视频&交流平台 SpringBoot视频:http://t.cn/R3QepWG Spring Cloud视频:http:/ ...
- [Full-stack] 异步即时通信 - Async
故事背景 socket.io, node.js, koa为首的一些通信框架和后端技术点. 之后有必要过一遍<NodeJS 设计模式>. 基础概念 一.短轮询.长轮询(comet).长连接( ...
- 最全spring boot视频系列,你值得拥有
================================== 从零开始学Spring Boot视频 ================================== àSpringBoot ...
随机推荐
- 从toString()方法到Object.prototype.toString.call()方法
一.toString方法和Object.prototype.toSting.call()的区别 var arr=[1,2]; 直接对一个数组调用toString()方法, console.log(ar ...
- webservice、WSDL简介
Webservice是跨平台.跨语言的远程调用技术 通信机制的本质是xml数据交换 采用soap协议进行通信 而WSDL 指网络服务描述语言 (Web Services Description Lan ...
- 20145301《Java程序设计》第10周学习总结
20145301 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据 计算机网络 路由器和交换机组成了核心的计算机 ...
- 20145327高晨 实验一 "Java开发环境的熟悉"
实验一 Java开发环境的熟悉(Linux + Eclipse) (Windows + IDEA) 实验内容:实现Fibonacci数列功能,并进行测试. 实验步骤: Fibonacci数列(斐波拉契 ...
- 20145335《java程序设计》第5次实验报告
20145335郝昊实验五 java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 本次实验我的结对编程对象是20145307陈 ...
- Duilib + wke 设置wke背景透明
WkeWebKit.cpp 新增 wkeSetTransparent(m_pWebView, true); void CWkeWebkitUI::DoInit() { CControlUI::DoIn ...
- 从零开始玩转JMX(二)——Condition
Notification 一个MBean提供的管理接口允许代理对其管理资源进行控制和配置.然而,对管理复杂的分布式系统来说,这些接口知识提供了一部分功能.通常,管理应用程序需要对状态变化或者当特别情况 ...
- Dll Hijacker
#coding=utf-8 # # Dll Hijacker # # platform: Python 2.x @ Windows # # author:Coca1ne import os,sys,t ...
- keepalived与nginx安装
目的: 当用户请求访问时,会通过nginx来访问web服务应用,因此我们必须要保证nginx的高可用,要保证nginx的高可用,我们需要通过keepalived来监控nginx,并对外提供1个虚拟的v ...
- django from验证组件
from django.shortcuts import render,redirect from django.forms import Form,fields class loginForm(Fo ...