c/c++ 后台开发学习笔记 2.1.4 websocket协议与服务器实现

本文介绍了WebSocket协议的基础知识,包括它对TCP的简单封装以提高数据传输效率,以及在后台开发中的应用。详细讲解了WebSocket的三个状态:handshake、transmission和closed。同时,阐述了WebSocket包的格式,使用自动机进行状态处理的方法,以及握手和密文传输的过程。内容适合C/C++后端开发者学习。
摘要由CSDN通过智能技术生成

websocket 协议

websocket是对tcp的简单封装,没有http那么长的文件头,提高了数据传输的效率。
多用于服务器主动与客户端通信
websocket有三个状态
handshake --回应握手请求-> transmission --接受到FIN-> closed

websocket包格式

官方文档

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-------+-+-------------+-------------------------------+
     |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
     |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
     |N|V|V|V|       |S|             |   (if payload len==126/127)   |
     | |1|2|3|       |K|             |                               |
     +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
     |     Extended payload length continued, if payload len == 127  |
     + - - - - - - - - - - - - - - - +-------------------------------+
     |                               |Masking-key, if MASK set to 1  |
     +-------------------------------+-------------------------------+
     | Masking-key (continued)       |          Payload Data         |
     +-------------------------------- - - - - - - - - - - - - - - - +
     :                     Payload Data continued ...                :
     + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
     |                     Payload Data continued ...                |
     +---------------------------------------------------------------+

分为head和payload两个部分,head的长度由payload的值决定

使用自动机进行处理

在ntyevent中增加一个enum state变量记录当前状态即可
值是

enum {
   
	WS_HANDSHARK = 0,
	WS_TRANMISSION = 1,
	WS_END = 2,
};

accept_cb的时候要初始化event的state为handshake

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值