作家
登录

WebSocket实现原理

作者: 来源: 2017-07-11 16:29:23 阅读 我要评论

ret = ws__make_up(ws, payload_len); 
  •  
  • if (ret != OK) { 
  •  
  • return ret; 
  •  
  •  
  •   
  •  
  •   
  •  
  • rd_buf = ws->buf; 
  •  
  • frame->payload = malloc(payload_len); 
  •  
  • memcpy(frame->payload, rd_buf, payload_len); 
  •  
  •   
  •  
  • ws__reset_buf(ws, payload_len); 
  •  
  •   
  •  
  • if (frame->fin == 1) { 
  •  
  • // is control frame 
  •  
  • ws__dispatch_msg(ws, frame); 
  •  
  • ws__clean_frame(ws); 
  •  
  • else { 
  •  
  • ws__append_frame(ws); 
  •  
  •  
  •   
  •  
  • ws->rd_state = WS_READ_IDLE; 
  •  
  •   
  •  
  • break; 
  •  
  •  
  •  
  •   
  •  
  • return ret; 
  •  
  •  
  • 封闭连接

    封闭连接分为两种:办事端提议封闭和客户端主动封闭。

    办事端跟客户端的处理根本一致,以办事端为例:

    办事端提议封闭的时刻,会客户端发送一个封闭帧,客户端在接收到帧的时刻经由过程解析出帧的opcode来断定是否是封闭帧,然后同样向办事端再发送一个封闭帧作为回应。

    1. if (op_code == OP_CLOSE) { 
    2.  
    3. int status_code; 
    4.  
    5. char *reason; 
    6.  
    7. char *status_code_buf = (char *)&status_code; 
    8.  
    9. status_code_buf[0] = payload[1]; 
    10.  
    11. status_code_buf[1] = payload[0]; 
    12.  
    13. reason = payload + 2; 
    14.  
    15.   
    16.  
    17. if (ws->state != WS_STATE_CLOSED) { 
    18.  
    19. /** 
    20.  
    21. * should send response to remote server 
    22.  
    23. */ 
    24.  
    25.   
    26.  
    27. ws_send(ws, NULL, 0, OP_CLOSE | FLAG_FIN); 
    28.  
    29. ws->state = WS_STATE_CLOSED; 
    30.  
    31.  
    32.   
    33.  

    34.   推荐阅读

        Linux_基于Docker搭建Redis集群

      应用redis-6379为主机,其余两台为大年夜机应用 docker exec -ti 容器ID /bin/bash 分别进入三个Redis容器进入容器后,应用 redis-cli 敕令,连接redis办事端连接办过后,应用 info replication 查看当前机械的角色未>>>详细阅读


      本文标题:WebSocket实现原理

      地址:http://www.17bianji.com/lsqh/36156.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)