Netty使用

Netty使用,第1张

Netty使用

第一章 Socket简介

文章目录
  • Netty使用
  • 前言
  • 一、Socket是什么?
  • 二、BIO
  • 三、NIO
    • 1.面向流与面向缓冲
    • 2.阻塞与非阻塞 IO
    • 3.NIO 之 Reactor 模式
    • 4.三大核心组件
      • Selector 选择器
      • Channel 管道
      • buffer 缓冲区
    • 1.引入库
    • 1.引入库
    • 1.引入库
    • 1.引入库
    • 2.读入数据
  • 总结


前言

网络编程基础知识。


一、Socket是什么?

Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口,一般由 *** 作系统提供。在设计模式中,Socket 其实就是一个门面模式,它把复杂的 TCP/IP 协议处理和通信缓存管理等等都隐藏在 Socket 接口后面,对用户来说,使用一组简单的接口就能进行
网络应用编程,让Socket 去组织数据,以符合指定的协议。主机 A 的应用程序要能和主机 B 的应用程序通信,必须通过 Socket 建立连接。
客户端连接上一个服务端,就会在客户端中产生一个 socket 接口实例,服务端每接受一个客户端连接,就会产生一个 socket 接口实例和客户端的 socket 进行通信,有多个客户端连接自然就有多个 socket 接口实例。
ServerSocket 并不负责具体的网络读写,ServerSocket 就只是负责接收客户端连接后,新启一个 socket 来和客户端进行沟通。这一点对所有模式的通信编程都是适用的。
在通信编程里,我们关注的其实也就是三个事情:连接(客户端连接服务器,服务器等待和接收连接)、读网络数据、写网络数据,所有模式的通信编程都是围绕着这三件事情进行的。服务端提供 IP 和监听端口,客户端通过连接 *** 作想服务端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可以通过套接字进行通信。

二、BIO

BIO为阻塞的IO,BIO的服务端会一直等待客户端连接或者发送消息,在读取到消息之前会一直阻塞,有其他的客户端连接ServerSingle没有反应,因为执行的主线程一直在等待第一个客户端发送消息。所以在 BIO 通信里,我们往往会在服务器的实现上结合线程来处理连接以及和客户端的通信。服务端容易产生大量线程,造成系统性能下降服务死掉。如果用线程池限制线程数,让一个线程负责多个客户端的请求,有一个读取数据比较慢(数据量大、网络传输慢)的话,高并发情况下其他接入消息只能一直等待。

三、NIO 1.面向流与面向缓冲

Java NIO 和 IO 之间第一个最大的区别是,IO 是面向流的,NIO 是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO 的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

2.阻塞与非阻塞 IO

Java IO 的各种流是阻塞的。这意味着,当一个线程调用 read() 或 write()时,该线程被
阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。
Java NIO 的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目
前可用的数据,如果目前没有数据可用时,就什么都不会获取。而不是保持线程阻塞,所以
直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线
程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。
线程通常将非阻塞 IO 的空闲时间用于在其它通道上执行 IO *** 作,所以一个单独的线程现在
可以管理多个输入和输出通道(channel)。

3.NIO 之 Reactor 模式

“反应”器名字中”反应“的由来:
“反应”即“倒置”,“控制逆转”,具体事件处理程序不调用反应器,而向反应器注
册一个事件处理器,表示自己对某些事件感兴趣,有时间来了,具体事件处理程序通过事件处理器对某个指定的事件发生做出反应;这种控制逆转又称为“好莱坞法则”(不要调用我,让我来调用你)
例如,路人甲去做男士 SPA,大堂经理负责服务,路人甲现在只对 10000 技师感兴趣,
但是路人甲去的比较早,就告诉大堂经理,等 10000 技师上班了或者是空闲了,通知我。等路人甲接到大堂经理通知,做出了反应,把 10000 技师占住了。
然后,路人甲想起上一次的那个 10000 号房间不错,设备舒适,灯光暧昧,又告诉大堂
经理,我对 10000 号房间很感兴趣,房间空出来了就告诉我,我现在先和 10000 这个小姐聊下人生,10000 号房间空出来了,路人甲再次接到大堂经理通知,路人甲再次做出了反应。路人甲就是具体事件处理程序,大堂经理就是所谓的反应器,“10000 技师上班了”和“10000 号房间空闲了”就是事件,路人甲只对这两个事件感兴趣,其他,比如 10001 号技师或者 10002 号房间空闲了也是事件,但是路人甲不感兴趣。大堂经理不仅仅服务路人甲这个人,他还可以同时服务路人乙、丙………,每个人所感兴趣的事件是不一样的,大堂经理会根据每个人感兴趣的事件通知对应的每个人。

4.三大核心组件 Selector 选择器

Selector 的英文含义是“选择器”,也可以称为为“轮询代理器”、“事件订阅器”、“channel
容器管理机”都行。
Java NIO 的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用
一个选择器(Selectors),然后使用一个单独的线程来 *** 作这个选择器,进而“选择”通道:
这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。
应用程序将向 Selector 对象注册需要它关注的 Channel,以及具体的某一个 Channel 会
对哪些 IO 事件感兴趣。Selector 中也会维护一个“已经注册的 Channel”的容器。
可以通过 cancel 方法取消键,取消的键不会立即从 selector 中移除,而是添加到
cancelledKeys 中,在下一次 select *** 作时移除它.所以在调用某个 key 时,需要使用 isValid 进行校验.

Channel 管道

通道,被建立的一个应用程序和 *** 作系统交互事件、传递内容的渠道(注意是连接到 ***
作系统)。那么既然是和 *** 作系统进行内容的传递,那么说明应用程序可以通过通道读取数据,也可以通过通道向 *** 作系统写数据,而且可以同时进行读写。
• 所有被 Selector(选择器)注册的通道,只能是继承了 SelectableChannel 类的子类。
• ServerSocketChannel:应用服务器程序的监听通道。只有通过这个通道,应用程序才
能向 *** 作系统注册支持“多路复用 IO”的端口监听。同时支持 UDP 协议和 TCP 协议。
• ScoketChannel:TCP Socket 套接字的监听通道,一个 Socket 套接字对应了一个客户
端 IP:端口 到 服务器 IP:端口的通信连接。
通道中的数据总是要先读到一个 Buffer,或者总是要从一个 Buffer 中写入。

buffer 缓冲区

Buffer 用于和 NIO 通道进行交互。
数据是从通道读入缓冲区,从缓冲区写入到通道中的。以写为例,应用程序都是将数据写入
缓冲,再通过通道把缓冲的数据发送出去,读也是一样,数据总是先从通道读到缓冲,应用程序再读缓冲的数据。
缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存(其实就是数组)。
这块内存被包装成 NIO Buffer 对象,并提供了一组方法,用来方便的访问该块内存。

channel注册到选择器上并选择对应的 *** 作
通道 —— 缓冲 —— 应用

1.引入库 1.引入库 1.引入库 1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/801326.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-07
下一篇 2022-05-07

发表评论

登录后才能评论

评论列表(0条)

保存