WebSocket

对开始的时候我有点好奇为什么有了http协议还需要websocket呢?

因为http协议是无状态短链接一次请求一次响应的 只能客户端请求一次服务端发送一次结果,并不能服务端主动推送消息,所以websocket就应运而生了,websocket可以服务端主动的向客户端推送消息

  • WebSocket API最伟大之处在于服务器和客户端可以在给定的时间范围内的任意时刻,相互推送信息。WebSocket 并不限于以 Ajax(或 XHR)方式通信,因为 Ajax 技术需要客户端发起请求,而 WebSocket 服务器和客户端可以彼此相互推送信息;XHR 受到域的限制,而 WebSocket 允许跨域通信。

websocket优点:
1、服务器与客户端之间交换的标头信息很小,大概只有 2 字节;
2、客户端与服务器都可以主动传送数据给对方;
3、不用频率创建 TCP 请求及销毁请求,减少网络带宽资源的占用,同时也节省服务器资源;
  • tcp有三次握手 其实 websocket也是有我收到的就是在客户端建立连接访问的时候就有了握手,当new WebSocket建立的时候就产生了握手
 ws = new WebSocket(ws_serv + "/toy/" + toy_id);
  • python 的后端实现 websocket 的处理,有很多方法的。比较常见的是 gevent 的 websocket 的方式。
from flask import Flask, request
from geventwebsocket.websocket import WebSocket #导入WebSocket
from geventwebsocket.handler import WebSocketHandler #导入连接方式  它的通信连接
from gevent.pywsgi import WSGIServer #使用的连接方式

app = Flask(__name__)



@app.route("/toy/<tid>")
def toy(tid):
    user_socket = request.environ.get("wsgi.websocket")  # type:WebSocket 获取你的连接对象
    if user_socket:
        user_socket_dict[tid] = user_socket
        # { uid : websocket}
        print(user_socket_dict)

if __name__ == '__main__':
    http_serv = WSGIServer(("0.0.0.0", 9528), app, handler_class=WebSocketHandler)
    http_serv.serve_forever()

client端:

ws = new WebSocket(ws_serv + "/toy/" + toy_id);  # 建立与服务器webscocket的连接 就是握手环节

ws.onmessage = function (data) { //通过这个连接对象来对数据进行操作
							.....
                        }
ws.onclose = function () {
                        window.location.reload();
                    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lovely_red_scarf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值