在Ubuntu 16.04上安装和配置Elasticsearch的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
Elasticsearch 是一个用于实时分布式搜索和数据分析的平台。它因易用性、强大功能和可扩展性而备受欢迎。
Elasticsearch 支持 RESTful 操作。这意味着您可以使用 HTTP 方法(GET、POST、PUT、DELETE 等)与 HTTP URI(/collection/entry
)结合使用来操作您的数据。直观的 RESTful 方法既方便开发者又用户友好,这也是 Elasticsearch 受欢迎的原因之一。
Elasticsearch 是一款免费且开源的软件,由 Elastic 公司提供支持。这种组合使其适用于个人测试到企业集成等各种场景。
本文将介绍 Elasticsearch,并向您展示如何安装、配置、保护和开始使用它。
先决条件
在按照本教程操作之前,您需要:
-
通过按照《使用 Ubuntu 16.04 进行初始服务器设置》设置好的 Ubuntu 16.04 Droplet,包括创建一个 sudo 非根用户。
-
安装了 Oracle JDK 8,您可以按照这篇 Java 安装文章中的“安装 Oracle JDK”部分进行操作。
除非另有说明,本教程中需要 root 权限的所有命令都应该以具有 sudo 权限的非根用户身份运行。
步骤 1 — 下载并安装 Elasticsearch
Elasticsearch 可以直接从 elastic.co 以 zip
、tar.gz
、deb
或 rpm
包的形式下载。对于 Ubuntu,最好使用 deb
(Debian)包,它会安装运行 Elasticsearch 所需的一切。
首先,更新您的软件包索引。
sudo apt-get update
下载最新的 Elasticsearch 版本,本文撰写时为 2.3.1。
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.3.1/elasticsearch-2.3.1.deb
然后按照通常的 Ubuntu 方法使用 dpkg
进行安装。
sudo dpkg -i elasticsearch-2.3.1.deb
这将导致 Elasticsearch 安装在 /usr/share/elasticsearch/
,其配置文件放置在 /etc/elasticsearch
,并将其 init 脚本添加到 /etc/init.d/elasticsearch
。
为了确保 Elasticsearch 随服务器自动启动和停止,将其 init 脚本添加到默认运行级别。
sudo systemctl enable elasticsearch.service
在首次启动 Elasticsearch 之前,请查看下一节关于推荐的最小配置。
步骤 2 — 配置 Elasticsearch
现在 Elasticsearch 及其 Java 依赖已安装,是时候配置 Elasticsearch 了。Elasticsearch 配置文件位于 /etc/elasticsearch
目录中。有两个文件:
-
elasticsearch.yml
配置 Elasticsearch 服务器设置。这是存储所有选项(除了日志选项)的地方,这也是我们主要关注的文件。 -
logging.yml
提供日志配置。一开始,您不必编辑此文件。您可以保留所有默认的日志选项。您可以在/var/log/elasticsearch
中找到生成的日志。
在任何 Elasticsearch 服务器上自定义的第一个变量是 elasticsearch.yml
中的 node.name
和 cluster.name
。正如它们的名称所示,node.name
指定服务器(节点)的名称,以及后者所关联的集群。
如果您不自定义这些变量,node.name
将根据 Droplet 主机名自动分配。cluster.name
将自动设置为默认集群的名称。
cluster.name
值被 Elasticsearch 的自动发现功能用于自动发现和关联 Elasticsearch 节点到一个集群。因此,如果您不更改默认值,您可能会在集群中找到不需要的节点,这些节点在同一网络上被发现。
开始使用 nano
或您喜欢的文本编辑器编辑主要的 elasticsearch.yml
配置文件。
sudo nano /etc/elasticsearch/elasticsearch.yml
删除 cluster.name
和 node.name
行开头的 #
字符以取消注释,然后更新它们的值。您在 /etc/elasticsearch/elasticsearch.yml
文件中的第一个配置更改应该如下所示:
. . .
cluster.name: mycluster1
node.name: "My First Node"
. . .
这是您可以使用 Elasticsearch 的最小设置。但是,建议继续阅读配置部分,以更全面地了解和微调 Elasticsearch。
Elasticsearch 的一个特别重要的设置是服务器的角色,即主服务器或从服务器。主服务器 负责集群的健康和稳定性。在具有大量集群节点的大型部署中,建议有多个专用主服务器。通常,专用主服务器不会存储数据或创建索引。因此,不应该有被过载的机会,从而危及集群的健康。
从服务器 用作可以加载数据任务的工作节点。即使从节点过载,只要有其他节点可以承担额外负载,集群的健康就不会受到严重影响。
确定服务器角色的设置称为 node.master
。默认情况下,节点是主节点。如果您只有一个 Elasticsearch 节点,应该将此选项保留为默认的 true
值,因为至少需要一个主节点。或者,如果希望将节点配置为从节点,请将变量 node.master
分配为 false
值,如下所示:
. . .
node.master: false
. . .
另一个重要的配置选项是 node.data
,它确定节点是否存储数据。在大多数情况下,此选项应该保持其默认值(true
),但有两种情况下您可能希望不在节点上存储数据。一种情况是当节点是之前提到的专用主节点时。另一种情况是当节点仅用于从其他节点获取数据和聚合结果时。在后一种情况下,节点将充当 搜索负载均衡器。
同样,如果您只有一个 Elasticsearch 节点,您不应更改此值。否则,要禁用本地存储数据,请将 node.data
指定为 false
,如下所示:
. . .
node.data: false
. . .
在具有许多节点的较大 Elasticsearch 部署中,另外两个重要选项是 index.number_of_shards
和 index.number_of_replicas
。前者确定索引将被分割成多少片或 分片。后者定义将分布在集群中的副本数量。拥有更多分片可以提高索引性能,而拥有更多副本可以加快搜索速度。
默认情况下,分片数为 5,副本数为 1。假设您仍在单个节点上探索和测试 Elasticsearch,您可以从一个分片和零副本开始。因此,它们的值应该设置如下:
. . .
index.number_of_shards: 1
index.number_of_replicas: 0
. . .
您可能有兴趣更改的最后一个设置是 path.data
,它确定数据存储的路径。默认路径是 /var/lib/elasticsearch
。在生产环境中,建议您为存储 Elasticsearch 数据使用专用分区和挂载点。在最佳情况下,这个专用分区将是一个单独的存储介质,它将提供更好的性能和数据隔离。您可以通过如下方式指定不同的 path.data
路径:
. . .
path.data: /media/different_media
. . .
一旦您做出所有更改,请保存并退出文件。现在您可以首次启动 Elasticsearch。
sudo systemctl start elasticsearch
在尝试使用它之前,请给 Elasticsearch 一些时间完全启动。否则,您可能会收到关于无法连接的错误。
第三步 —— 安全配置 Elasticsearch
默认情况下,Elasticsearch 没有内置安全性,可以被可以访问 HTTP API 的任何人控制。这并不总是一个安全风险,因为 Elasticsearch 只监听回环接口(即 127.0.0.1
),只能在本地访问。因此,不可能进行公共访问,只要所有服务器用户都是受信任的,或者这是一个专用的 Elasticsearch 服务器,你的 Elasticsearch 就足够安全。
但是,如果你希望加强安全性,首先要做的是启用身份验证。身份验证由商业版的 Shield 插件提供。不幸的是,这个插件不是免费的,但你可以使用免费的 30 天试用来测试它。它的官方页面有很好的安装和配置说明。你可能需要额外了解的唯一一件事是 Elasticsearch 插件安装管理器的路径是 /usr/share/elasticsearch/bin/plugin
。
如果你不想使用商业插件,但仍然需要允许远程访问 HTTP API,你至少可以通过 Ubuntu 的默认防火墙 UFW(Uncomplicated Firewall)限制网络暴露。默认情况下,UFW 已安装但未启用。如果你决定使用它,请按照以下步骤操作:
首先,创建规则以允许任何所需的服务。你至少需要允许 SSH,以便可以登录服务器。要允许 SSH 的全球访问,可以将端口 22 加入白名单。
sudo ufw allow 22
然后允许对受信任的远程主机(例如 TRUSTED_IP
)的默认 Elasticsearch HTTP API 端口(TCP 9200)的访问,如下所示:
sudo ufw allow from TRUSTED_IP to any port 9200
之后,使用以下命令启用 UFW:
sudo ufw enable
最后,使用以下命令检查 UFW 的状态:
sudo ufw status
如果你已经正确指定了规则,输出应该如下所示:
[secondary_label Output of java -version]
Status: activeTo Action From
-- ------ ----
9200 ALLOW TRUSTED_IP
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
确认 UFW 已启用并保护 Elasticsearch 端口 9200 后,你可以允许 Elasticsearch 监听外部连接。要做到这一点,再次打开 elasticsearch.yml
配置文件。
sudo nano /etc/elasticsearch/elasticsearch.yml
找到包含 network.bind_host
的行,通过删除行首的 #
字符来取消注释,并将值更改为 0.0.0.0
,使其如下所示:
. . .
network.host: 0.0.0.0
. . .
我们指定了 0.0.0.0
,以便 Elasticsearch 监听所有接口和绑定的 IP。如果你希望它只监听特定接口,可以在 0.0.0.0
的位置指定其 IP。
要使上述设置生效,使用以下命令重新启动 Elasticsearch:
sudo systemctl restart elasticsearch
之后,尝试从受信任的主机连接到 Elasticsearch。如果无法连接,请确保 UFW 正常工作,并且已正确指定了 network.host
变量。
第四步 —— 测试 Elasticsearch
到目前为止,Elasticsearch 应该在端口 9200 上运行。你可以使用 curl
,这个命令行客户端 URL 传输工具和一个简单的 GET 请求来测试它。
curl -X GET 'http://localhost:9200'
你应该会看到以下响应:
[secondary_label Output of curl]
{"name" : "My First Node","cluster_name" : "mycluster1","version" : {"number" : "2.3.1","build_hash" : "bd980929010aef404e7cb0843e61d0665269fc39","build_timestamp" : "2016-04-04T12:25:05Z","build_snapshot" : false,"lucene_version" : "5.5.0"},"tagline" : "You Know, for Search"
}
如果你看到类似上面的响应,说明 Elasticsearch 正常工作。如果没有,请确保你已正确遵循安装说明,并且已允许 Elasticsearch 充分启动。
要对 Elasticsearch 进行更彻底的检查,执行以下命令:
curl -XGET 'http://localhost:9200/_nodes?pretty'
在上述命令的输出中,你可以看到并验证节点、集群、应用程序路径、模块等的所有当前设置。
第五步 — 使用 Elasticsearch
要开始使用 Elasticsearch,让我们首先添加一些数据。如前所述,Elasticsearch 使用 RESTful API,响应通常的 CRUD 命令:create(创建)、read(读取)、update(更新)和 delete(删除)。为了使用它,我们将再次使用 curl
。
您可以使用以下命令添加您的第一个条目:
curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
您应该会看到以下响应:
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}
通过 curl
,我们向 Elasticsearch 服务器发送了一个 HTTP POST 请求。请求的 URI 是 /tutorial/helloworld/1
,带有几个参数:
tutorial
是 Elasticsearch 中数据的索引。helloworld
是类型。1
是上述索引和类型下我们条目的 id。
您可以使用 HTTP GET 请求检索这个第一个条目。
curl -X GET 'http://localhost:9200/tutorial/helloworld/1'
结果应该如下所示:
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello World!" }}
要修改现有条目,您可以使用 HTTP PUT 请求。
curl -X PUT 'localhost:9200/tutorial/helloworld/1?pretty' -d '
{"message": "Hello People!"
}'
Elasticsearch 应该会确认成功修改,如下所示:
{"_index" : "tutorial","_type" : "helloworld","_id" : "1","_version" : 2,"_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"created" : false
}
在上面的示例中,我们将第一个条目的 message
修改为 “Hello People!”。因此,版本号已自动增加到 2
。
您可能已经注意到上述请求中的额外参数 pretty
。它启用了人类可读的格式,这样您可以将每个数据字段写在新的一行上。当检索数据并获得更好的输出时,您也可以使结果“漂亮化”:
curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty'
现在响应将以更好的格式呈现:
{"_index" : "tutorial","_type" : "helloworld","_id" : "1","_version" : 2,"found" : true,"_source" : {"message" : "Hello People!"}
}
到目前为止,我们已经向 Elasticsearch 添加了数据并进行了查询。要了解其他操作,请查看 API 文档。
结论
这就是安装、配置和开始使用 Elasticsearch 有多么容易。一旦您已经足够熟悉手动查询,您的下一个任务将是从您的应用程序开始使用它。
相关文章:
在Ubuntu 16.04上安装和配置Elasticsearch的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 Elasticsearch 是一个用于实时分布式搜索和数据分析的平台。它因易用性、强大功能和可扩展性而备受欢迎。 Elasticsearch 支持 R…...
C#给SqlSugar封装一个单例类
.NET兼职社区 可以直接用,轻量方便,无需重复造轮子。 这里只对CRUD进行封装,我的应用比较简单。 using SqlSugar; using System.Collections.Generic;namespace MusicApp.Assist {internal class SqlSugarAssist{private static readonly ob…...
Postman接口测试工具的原理及应用详解(六)
本系列文章简介: 在当今软件开发的世界中,接口测试作为保证软件质量的重要一环,其重要性不言而喻。随着前后端分离开发模式的普及,接口测试已成为连接前后端开发的桥梁,确保前后端之间的数据交互准确无误。在这样的背景…...
【算法 之插入排序 原理及案例】
插入排序原理: 插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常…...
第一节:如何开发第一个spring boot3.x项目(自学Spring boot 3.x的第一天)
大家好,我是网创有方,从今天开始,我会记录每篇我自学spring boot3.x的经验。只要我不偷懒,学完应该很快,哈哈,更新速度尽可能快,想和大佬们一块讨论,如果需要讨论的欢迎一起评论区留…...
JS逆向:由 words 、sigBytes 引发的一系列思考与实践
【作者主页】:小鱼神1024 【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 在做JS逆向时,你是否经常看到 words 和 sigBytes 这两个属性呢,比如ÿ…...
计算机的错误计算(十五)
摘要 介绍历史上由于计算精度问题引起的灾难或事件。 今天换个话题,说说历史上曾经发生过的一些事件。 1961 年 , 美国麻省理工学院气象学家洛伦兹在仿真天气预报时 , 将 0.506127 舍入到 0.506 , 所得计算结果大相径庭 ! 这种“差之毫厘 , 谬以千里”的现象…...
制作img文件
安装软件包 sudo apt-get install dosfstools dump parted kpartx 创建空白img文件 sudo dd if/dev/zero ofraspberrypi.img bs1M count4000 给img文件分区 sudo parted raspberrypi.img --script -- mklabel msdos sudo parted raspberrypi.img --script -- mkpart primar…...
GB28181视频汇聚平台EasyCVR接入Ehome设备视频播放出现异常是什么原因?
多协议接入视频汇聚平台EasyCVR视频监控系统采用了开放式的架构,系统可兼容多协议接入,包括市场标准协议:国标GB/T 28181协议、GA/T 1400协议、JT808、RTMP、RTSP/Onvif协议;以及主流厂家私有协议及SDK,如:…...
Java利用poi实现word,excel,ppt,pdf等各类型文档密码检测
介绍 最近工作上需要对word,excel,ppt,pdf等各类型文档密码检测,对文件进行分类,有密码的和没密码的做区分。查了一堆资料和GPT都不是很满意,最后东拼西凑搞了个相对全面的检测工具代码类,希望能给需要的人带来帮助。 说明 这段…...
顺序表与链表学习笔记
顺序表及其结构定义 (1)结构定义 顺序存储: 顺序表的元素按顺序存储在一块连续的内存区域中,每个元素占用相同大小的存储空间。通过数组实现,每个元素可以通过下标快速访问。 存储密度高: 因为顺序表使用…...
2.SQL注入-字符型
SQL注入-字符型(get) 输入kobe查询出现id和邮箱 猜测语句,字符在数据库中需要用到单引号或者双引号 select 字段1,字段2 from 表名 where usernamekobe;在数据库中查询对应的kobe,根据上图对应上。 select id,email from member where usernamekobe;编写payload语…...
在Ubuntu 14.04上安装和配置Elasticsearch的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 Elasticsearch 是一个用于实时分布式搜索和数据分析的平台。它因易用性、强大功能和可扩展性而备受欢迎。 Elasticsearch 支持 R…...
C++:inline关键字nullptr
inline关键字 C中inline使用关键点强调 (1)inline是一种“用于实现的关键字”,而不是一种“用于声明的关键字”,所以关键字 inline 必须与函数定义体放在一起,而不是和声明放在一起 (2)如果希望在多个c文件中使用,则inline函数应…...
数字信号处理实验三(IIR数字滤波器设计)
IIR数字滤波器设计(2学时) 要求: 产生一复合信号序列,该序列包含幅度相同的28Hz、50Hz、100Hz、150Hz的单音(单频)信号;其中,50Hz及其谐波为工频干扰(注:采样…...
Why is Kafka fast?(Kafka性能基石)
Kafka概述 Why is kafka fast? 思考一下,当我们在讨论Kafka快的时候我们是在谈论什么呢?What does it even mean that Kafka is fast? 我们是在谈论kafka的低延迟(low latency)还是在讨论吞吐量(through…...
Linux下的SSH详解及Ubuntu教程
前言 SSH(Secure Shell)是一种用于计算机之间安全通信的协议,广泛应用于远程登录、系统管理和文件传输等场景。本文将详细介绍SSH在Linux系统(特别是Ubuntu)下的使用,包括安装、配置、密钥管理和常见应用&…...
MobPush HarmonyOS NEXT 版本集成指南
开发工具:DevEco Studio 集成方式:在线集成 HarmonyOS API支持:> 11 集成前准备 注册账号 使用MobSDK之前,需要先在MobTech官网注册开发者账号,并获取MobTech提供的AppKey和AppSecret,详情可以点击查…...
什么是封装?为什么要封装?
什么是封装? 封装是计算机科学中的一个重要概念,尤其在面向对象编程(OOP)中占据核心地位。封装主要指的是将数据(属性)和对这些数据的操作(方法)组合在一个单元中(我们称…...
远程桌面无法复制粘贴文件到本地怎么办?
远程桌面不能复制粘贴问题 Windows远程桌面为我们提供了随时随地访问文件和数据的便捷途径,大大提升了工作和生活的效率。然而,在使用过程中,我们也可能遇到一些问题。例如,在通过远程桌面传输文件时,常常会出现无法复…...
LeetCode 207. 课程表
思路:这是一道拓扑排序问题,拓扑排序听起来可能有点复杂,但实际上它是个相当直观的概念。想象一下,你有很多事情要做,但有些事情必须在另一些事情完成之后才能开始,就像你得先穿上袜子再穿鞋子 拓扑排序就…...
数据结构历年考研真题对应知识点(树的基本概念)
目录 5.1树的基本概念 5.1.2基本术语 【森林中树的数量、边数和结点数的关系(2016)】 5.1.3树的性质 【树中结点数和度数的关系的应用(2010、2016)】 【指定结点数的三叉树的最小高度分析(2022)】 5.1…...
Pytorch和Tensorflow安装【Win和Linux】
Ubuntu/win安装Pytorch和Tensorflow 说明: 这两种框架的搭建,均基于Anaconda进行搭建。先在系统中安装Anaconda软件。 一、Pytorch的搭建 windows安装 (1)搭建参考官网给的命令,pytorch官网 (2)下载地址:https://download.pytorch.org/whl/torch_stable.html 从上述…...
筑算网基石 创数智未来|锐捷网络闪耀2024 MWC上海
2024年6月26日至28日,全球科技界瞩目的GSMA世界移动大会(MWC 上海)在上海新国际博览中心(SNIEC)盛大召开。作为行业领先的网络解决方案提供商,锐捷网络以“筑算网基石 创数智未来”为主题,带来了…...
T4打卡 学习笔记
所用环境 ● 语言环境:Python3.11 ● 编译器:jupyter notebook ● 深度学习框架:TensorFlow2.16.1 ● 显卡(GPU):NVIDIA GeForce RTX 2070 设置GPU from tensorflow import keras from tensorflow.keras…...
抖音矩阵云混剪系统源码 短视频矩阵营销系统V2(全开源版)
>>>系统简述: 抖音阵营销系统多平台多账号一站式管理,一键发布作品。智能标题,关键词优化,排名查询,混剪生成原创视频,账号分组,意向客户自动采集,智能回复,多…...
zabbix报警机制
zabbix思路流程...
【Matlab】-- 飞蛾扑火优化算法
文章目录 文章目录 01 飞蛾扑火算法介绍02 飞蛾扑火算法伪代码03 基于Matlab的部分飞蛾扑火MFO算法04 参考文献 01 飞蛾扑火算法介绍 飞蛾扑火算法(Moth-Flame Optimization,MFO)是一种基于自然界飞蛾行为的群体智能优化算法。该算法由 Sey…...
全面体验ONLYOFFICE 8.1版本桌面编辑器
ONLYOFFICE官网 在当今的数字化办公环境中,选择合适的文档处理工具对于提升工作效率和团队协作至关重要。ONLYOFFICE 8.1版本桌面编辑器,作为一款集成了多项先进功能的办公软件,为用户提供了全新的办公体验。今天,我们将深入探索…...
建议csdn赶紧将未经作者同意擅自锁住收费的文章全部解锁,别逼我用极端手段让你们就范
前两天我偶然发现csdn竟然将我以前发表的很多文章锁住向读者收费才让看。 csdn这种无耻行径往小了说是侵犯了作者的版权著作权,往大了说这是在打击我国IT领域未来的发展,因为每一个做过编程工作的人都知道,任何一个程序员的学习成长过程都少不…...
大连中山区网站建设/大庆黄页查询电话
前言 首先说明,对于JavaScript这门脚本语言,我是个菜鸟。虽然也写过不少JavaScript代码,但一直是不求甚解,直到最近才开始系统学习这门语言。学习的原因是我即将毕业,过了年就要正式工作了,而我要入职的职位…...
做花茶网站解说/百度指数分析平台
条码打印软件是一款应用广泛、功能灵活、操作简单的标签设计软件。软件工具箱中有很多功能按钮,使其能够在很短的时间内根据自己的需求在软件中设计出符合自己需要的标签。那么,在条码打印软件中该如何绘制圆角矩形呢?下面就给大家演示下绘制…...
白酒 网站模板/济南网络优化网址
Qt 之进程间通信(IPC)简述通信目的通信方式Qt进程通信TCP/IPShared MemoryD-BusQProcessSession Management更多参考QT5软件开发入门到项目实战PDF(配完整示例代码)(持续更新)Qt实现IPC进程间通信-mqueue消息队列QtDBus总结原文链接:https://…...
美术馆网站建设总体要求/说到很多seo人员都转行了
关于切片 按照我的理解的话,切片相当于是一个循环,语法就是for...in 列表或tuple名称,然后逐个遍历出来 但是切片可以根据自己想要的数据进行取舍 首先定义一个列表 Numberlist(range(100)) #0-99的数字如若想取出前20个数字的话,…...
邯郸做移动网站价格/外贸网站推广方式
文章目录1.回顾2.EnableWebMvc WebMvcConfigurer接口的使用原理3.总结1.回顾 根据之前的文章, 之前自定义的组件放入了容器中, 但是DispatcherServlet会使用自定义的组件而放弃了默认组件, 导致很多功能都失效了。 所以EnableWebMvc WebMvcConfigurer就是解决这个问题的 C…...
Axure只是做网站吗/2023年免费进入b站
转自:http://blog.csdn.net/yikai2009/article/details/8653697 版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[-] 阻塞阻塞操作非阻塞操作阻塞方式-read- 实现阻塞方式-write- 实现非阻塞方式的读写操作实例 --- 读阻塞的实…...