zoukankan      html  css  js  c++  java
  • 底层连接tcp连接,它怎么就建立起来了?【客户端】

    【客户端】

    红唇 我想建立连接

    置一些标志,表示该url已经准备开始连接,其他尝试暂别进行

    红唇 我打开socket通道,要建了

    打开一个socketChannel,并设置该channel相关属性

    红唇 好,调了,通道你后面建立去吧

    异步连接,非同步阻塞,即刻返回,tcp连接在后面其实已经悄麽悄麽开建了

    红唇 我方是否真好做好连接建立准备呢?

    将channel注册给selector等,选选人,看看谁来负责OP_CONNECT事件、谁来负责OP_READ、OP_WRITE事件等。

    为连接的到来做好一切准备。详见下面【备注】

    红唇 连接来啦,速速创建session

    channel里来了OP_CONNECT事件,太好啦,那么开始创建会话。

    会话属性设置:handler, 协议,写消息队列,消息派发器,是否并发读写,会话超时时间等。

    红唇 通知上层,我已经建立好啦!任务完成!

    回调方式,future神马的,总之,通知到就好了。

    【备注】

    1) Reactor 休闲健身中心(反应堆)
    2) Selector 健身房

    3) Channel

    会员

    4) SelectionKey

    会员卡

    按我的理解,这其实是一个故事:

    在休闲健身中心,有一家健身房,会员们要想健身必须首先注册为会员,注册后会得到会员卡,会员卡终身有效。每个会员都有感兴趣的项目,如单车、瑜珈、跑步、或是彪悍的甩肉机。

    翻译为这个场景:

    在Reactor里,有一家selector,channel要想收发事件必须首先注册,注册后会得到selectionkey,selectionkey终身有效。每个selectionkey都有感兴趣的项目,如OP_CONNECT、OP_READ、OP_WRITE等。

    • 通道要向选择器进行注册,选择器会为通道分配资源
    • 一个通道至多只能在任意特定选择器上注册一次
    • 向选择器注册后,通道在注销 之前将保持注册状态。通过取消表示通道注册的键,才能真正注销通道
    • 如果选择器本身已关闭,则将注销该通道,并且表示其注册的键将立即无效
    • 多个并发线程可安全地使用可选择的通道

    http://www.goldendoc.org/2011/07/java-nio-%E9%80%89%E6%8B%A9%E5%99%A8%E4%B8%8E%E9%80%9A%E9%81%93_3%EF%BC%88%E9%80%89%E6%8B%A9%E5%99%A8%E5%A4%84%E7%90%86%E6%B3%A8%E5%86%8C%E7%9A%84%E8%BF%87%E7%A8%8B%EF%BC%89/

  • 相关阅读:
    django2自动发现项目中的url
    Python中的__name__
    阻塞与非阻塞、同步与异步、I/O模型
    Python中的关键字的用法
    元类
    数据库介绍
    django+nginx+uwsgi 项目部署
    centos7安装mysql5.6
    MySQL5.7的新特性
    Python进行MySQL数据库操作
  • 原文地址:https://www.cnblogs.com/alipayhutu/p/2549907.html
Copyright © 2011-2022 走看看