• ngx-push-stream模块源码学习(四)——订阅


    一、概述 
    push stream模块允许三种模式的订阅者: 

    • longpolling:每收到服务端响应数据即断开连接然后迅速重连,连接耗时可以忽略
    • stream:与服务端保持长连接,持续不断的请求->响应
    • polling:以轮询的方式向等待服务端响应(只接受一次数据)——(个人理解)


    本文重点说明前两种。 
    二、流程 
    上一篇博文中捎带提到了订阅者的销毁时间——发送完MSG后(ngx_http_push_stream_send_response_finalize),本文将详细说明其讲解其诞生过程。 





    从上述流程可以看出模块对longpolling和stream两种请求的处理方式有相同之处,也有少许不同。 
    相同之处主要体现在当所订阅的channel中不存在消息时,都执行下述流程: 

      • 准备连接处于保存状态(subscriber_prepare_request_to_keep_connected)

         
               

    可以看出,在此流程中订阅者诞生

    • 发送相同的响应头
    • 注册订阅者
    •         将订阅者添加到ngx worker的订阅者队列,启动ping定时器和disconnect定时器等
    • 将订阅者添加到所订阅的channel上


           

    Java代码  收藏代码
    1. ngx_queue_insert_tail(&channel->workers_with_subscribers.queue, &worker_sentinel->queue);  
    2.           



    不同的是当channel中存在消息时,stream模式仍执行上述流程(建立长连接)然后获取MSG,而longpolling则直接从channel中取得MSG。 

  • 相关阅读:
    TSQL 中游标应用示例
    [转]浅谈数据库设计技巧(上)、(下)
    ASP.NET页面打印技术的总结(转)
    深入理解RIA(转)
    三层架构的bussiness层没用?
    ASP.NET中常用的26个优化性能方法(转)
    基于MapX的GIS动态操作与实现
    web项目经理手册项目经理的工作内容(转)
    ASP.NET中上传文件到数据库
    学习.net中I/O的心得第一篇 初探I/O(转)
  • 原文地址:https://www.cnblogs.com/xinyaoxp/p/3423550.html
Copyright © 2020-2023  润新知