WebSocket爬虫

一:WebSocket

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。,被广泛应用于对数据实时性要求较高的场景,如体育赛事播报、股票走势分析、在线聊天等。

  在WebSocket协议未出现之前,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

  在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯

二:WebSocket握手协议

与HTTP协议不同的是,WebSocket协议只需要发送一次连接请求。请求的完整过程被称为握手,即客户端为了创建WebSocket连接而向服务器发送特定的HTTp请求并声明升级协议。WebSocket 是独立的、创建在 TCP 上的协议,通过HTTP/1.1 协议的101状态码进行握手,握手成功后才会转为WebSocket协议。

  WebSocket通信过程:

客户端发起握手请求

服务器端收到请求后验证并返回握手结果

连接建立成功,服务器端开始推送消息

三:websocket发送数据

import websocket

url = 'ws://demos.kaazing.com/echo'

ws = websocket.create_connection(url=url, timeout=15)

ws.send("以字符串发送数据") # 以字符串发送消息

ws.recv() # 接收消息,如果无消息将会堵塞,直到15s超时等待结束

ws.send_frame("以帧形式发送数据") # 以帧形式发送数据

ws.recv_data_frame() # 接收以帧发送的数据

ws.send_binary("以二进制格式发送数据".encode()) # 以二进制格式发送数据

ws.send_close() # 向服务器发送关闭连接请求,传入状态码及其原因

ws.close() # 关闭连接

看似很简单,但在实际中会伴随着很多通信的加密,这个需要在具体问题中具体分析,主要就三个方面:建立ws连接、发送消息、接收消息。

ws的应用在即时性较强的信息传播行业,如股票、彩票、赛事、通信中用的很普遍,但是其难度并不大。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值