【oracle数据库安装篇一】Linux5.6基于LVM安装oracle10gR2单机

说明

本篇文章主要介绍了Linux5.6基于LVM安装oracle10gR2单机的配置过程,比较详细,基本上每一个配置部分的步骤都提供了完整的脚本,安装部分都提供了简单的说明和截图,帮助你100%安装成功oracle数据库。

安装过程有不明白的地方或者卡点,可以私信留言,看到会回复。

1 环境规划

配置

类目配置
操作系统版本rhel5.6 x86_64
服务器主机名oracle10g
物理分配内存2G
SWAP交换分区3G
IP地址192.168.56.110
虚拟机存放位置G:\Machine\Oracle\Single\oracle10g\oracle10g.vdi
本地磁盘及Oracle软件目录/u01/app/oracle

安装介质

在这里插入图片描述
如需获取安装介质,请后台私信我。

2 安装前准备及操作系统安装配置

2.1 虚拟机安装

安装的rhel5.6可能没有安装sshd服务,需要在挂载本地yum源后安装sshd服务,下载的包为openssh-server和openssh-clients。

2.2 修改主机名

[root@oracle10g ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=oracle10g[root@oracle10g ~]# hostname
oracle10g

2.3 配置网络

一、修改网卡配置文件:

[root@oracle10g ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.56.255
HWADDR=08:00:27:90:4D:69
IPADDR=192.168.56.110
IPV6INIT=yes
IPV6_AUTOCONF=yes
NETMASK=255.255.255.0
NETWORK=192.168.56.0
ONBOOT=yes

主要关注BOOTPROTO、IPADDR、NETMASK和ONBOOT。

二、配置hosts

[root@oracle10g ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6192.168.56.110 oracle10g

注意:需要把127.0.0.1这一行的主机名删掉,要不然在配置检查的时候网络配置报错。

2.4 安装需要的软件包

Linux 5需要如下或以上版本的包,确认并安装缺失的包:

[root@oracle10g ~]# 
rpm -q binutils compat-db glibc kernel-headers glibc-headers glibc-devel gcc \
libstdc++ libstdc++-devel  gcc-c++ libXt libXp libXau-devel libXp-devel libXmu \
openmotif libaio libaio-devel  sysstat compat-gcc compat-gcc-34-c++ make ksh \
compat-libstdc++-296 compat-libstdc++-3 | grep "is not installed"

缺的包安装:

yum install -y compat-db libXp libXp-devel openmotif libaio libaio-devel sysstat compat-gcc ksh compat-libstdc++-3 

再检查一遍,还有没装的包:compat-gcc和compat-libstdc+±3,查看可安装的包:

[root@oracle10g ~]# yum search compat-gcc
Loaded plugins: rhnplugin
This system is not registered with RHN.
RHN support will be disabled.
================================================================== Matched: compat-gcc ===================================================================
compat-gcc-34.x86_64 : Compatibility GNU Compiler Collection
compat-gcc-34-c++.x86_64 : C++ support for compatibility compiler
compat-gcc-34-g77.x86_64 : Fortran 77 support for compatibility compiler[root@oracle10g ~]# yum search compat-libstdc++-3
Loaded plugins: rhnplugin
This system is not registered with RHN.
RHN support will be disabled.
============================================================== Matched: compat-libstdc++-3 ===============================================================
compat-libstdc++-33.i386 : Compatibility standard C++ libraries
compat-libstdc++-33.x86_64 : Compatibility standard C++ libraries

直接无脑把上面的包都装了就好。

yum install -y compat-gcc-34.x86_64 compat-gcc-34-c++.x86_64 compat-gcc-34-g77.x86_64
yum install -y compat-libstdc++-33.i386 compat-libstdc++-33.x86_64

注意:最好把i386的包也安装上,若没安装libXt i386的包,否则后续安装会报/lib/i386/libawt.so:libXt.so.6: cannot open shared object file: No such file or directory occurred。

安装下列包:

yum install -y libXau-devel.i386 libXp.i386 libXp-devel.i386

2.5 禁用不必要的服务

[root@oracle10g ~]# 
export LANG=en
chkconfig atd off
chkconfig sendmail off
chkconfig cups off
chkconfig bluthtooth off 

2.6 禁用防火墙和selinux

[root@oracle10g ~]# 
iptables -F
iptables -L
chkconfig iptables off
chkconfig ip6tables off
vi /etc/sysconfig/selinux
#改为:
SELINUX=disabled

2.7 创建oracle用户和组

[root@oracle10g ~]# 
groupadd -g 501 oinstall
groupadd -g 502 dba
groupadd -g 503 oper
useradd -u 501 -g oinstall -G dba,oper oracle
passwd oracle

2.8 创建lvm逻辑卷

创建分区:

[root@oracle10g ~]#
echo -e "n\np\n1\n\n+5120m\nw" | fdisk /dev/sdb
echo -e "n\np\n2\n\n+5120m\nw" | fdisk /dev/sdb
echo -e "n\np\n3\n\n+5120m\nw" | fdisk /dev/sdb
echo -e "n\np\n4\n\n\nw" | fdisk /dev/sdb

创建物理卷:

[root@oracle10g ~]#
pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4
vgcreate  vg_oracle /dev/sdb1 /dev/sdb2
lvcreate  -L 9.5G vg_oracle -n lv_oracle[root@oracle10g ~]# lvdisplay--- Logical volume ---LV Name                /dev/vg_oracle/lv_oracleVG Name                vg_oracleLV UUID                LEszdq-Eyum-JwZb-ELTU-2nFZ-jnBE-d6BKNPLV Write Access        read/writeLV Status              available# open                 0LV Size                9.50 GBCurrent LE             2432Segments               2Allocation             inheritRead ahead sectors     auto- currently set to     256Block device           253:0

格式化:

[root@oracle10g ~]# mkfs -t ext3 /dev/vg_oracle/lv_oracle

2.9 创建软件安装目录并挂载

创建软件安装目录:

[root@oracle10g ~]# 
mkdir /u01
df -h
mkdir -p  /u01/app/oracle
chown -R oracle:oinstall /u01

挂载:

[root@oracle10g ~]# df -Th
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/mapper/vg_oracle-lv_oracleext3    9.4G  150M  8.8G   2% /u01

设置永久挂载:

[root@oracle10g ~]# echo "/dev/mapper/vg_oracle-lv_oracle   /u01   ext3   defaults   0 0" >> /etc/fstab

2.10 配置相关系统文件

/etc/sysctl.conf:

[root@oracle10g ~]# vi /etc/sysctl.conf
#添加:
kernel.shmmni = 4096
kernel.sem = 250 32000 200 128
fs.file-max = 870400
net.ipv4.ip_local_port_range = 1024 65000net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 1048576
net.core.wmem_max = 1048576#生效:
[root@oracle10g app]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.sem = 250 32000 200 128
fs.file-max = 870400
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 1048576
net.core.wmem_max = 1048576

/etc/security/limits.conf:

[root@oracle10g ~]# vim /etc/security/limits.conf
#添加:
oracle  soft  nproc 3096
oracle  hard  nproc  16384
oracle  soft  nofile  65536
oracle  hard  nofile  870400

/etc/pam.d/login:

[root@oracle10g ~]# vim /etc/pam.d/login
#添加
session    required     /lib/security/pam_limits.so

由于Redhat 5上oracle10g RAC,hangcheck_reboot默认是0,即系统hang住不重起系统,CRS默认的misscount值是60s,Misscount必须 > hangcheck_tick+hangcheck_margin,因此设置:

[root@oracle10g ~]# vim /etc/modprobe.conf
#添加
options hangcheck-timer hangcheck_tick=10 hangcheck_margin=40 hangcheck_reboot=1[root@oracle10g ~]# modprobe hangcheck-timer
[root@oracle10g ~]# tail -20 /var/log/messages
...
Apr  9 01:42:19 oracle10g last message repeated 3 times
Apr  9 01:42:32 oracle10g last message repeated 6 times
Apr  9 01:42:36 oracle10g kernel: Hangcheck: starting hangcheck timer 0.9.0 (tick is 10 seconds, margin is 40 seconds).
Apr  9 01:42:36 oracle10g kernel: Hangcheck: Using monotonic_clock().

2.11 配置环境变量

[root@oracle10g ~]# su - oracle
[oracle@oracle10g ~]$ vim .bash_profile
#添加:
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2/db_1
export ORA_CRS_HOME=$ORACLE_BASE/product/10.2/crs
export ORACLE_SID=orcl
export ORACLE_TERM=xterm
export LANG=en_US
export PATH=$ORACLE_HOME/bin:$ORA_CRS_HOME/bin:$PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export TEMP=/tmp
export TMPDIR=/tmp
umask 022
PATH=$PATH:$HOME/bin

3 安装数据库软件

3.1 解压缩安装文件

创建安装包存放目录:

[oracle@oracle10g ~]$ cd
[oracle@oracle10g ~]$ mkdir soft/

上传安装包:

[oracle@oracle10g ~]$ ll soft/
total 783588
-rw-r--r-- 1 root root 801603584 Apr  9 01:51 10201_database_linux_x86_64.cpio

解压:

[oracle@oracle10g soft]$ cpio -idmv <10201_database_linux_x86_64.cpio[oracle@oracle10g soft]$ ll
total 783592
-rw-r--r-- 1 root   root     801603584 Apr  9 01:51 10201_database_linux_x86_64.cpio
drwxr-xr-x 6 oracle oinstall      4096 Oct 23  2005 database

3.2 安装数据库软件

3.2.1 运行安装命令

[root@oracle10g ~]# xhost +
access control disabled, clients can connect from any host
[root@oracle10g ~]# su - oracle
[oracle@oracle10g ~]$ cd soft/database/
[oracle@oracle10g database]$ ./runInstaller
Starting Oracle Universal Installer...Checking installer requirements...Checking operating system version: must be redhat-3, SuSE-9, redhat-4, UnitedLinux-1.0, asianux-1 or asianux-2Failed <<<<Exiting Oracle Universal Installer, log for this session can be found at /tmp/OraInstall2024-04-09_02-03-18AM/installActions2024-04-09_02-03-18AM.log

报错版本问题,系统版本必须为redhat-3, SuSE-9, redhat-4, UnitedLinux-1.0, asianux-1 or asianux-2。

3.2.2 修改操作系统版本

release 5.6修改为release 4:

[root@oracle10g ~]# cat /etc/redhat-release
#Red Hat Enterprise Linux Server release 4 (Tikanga)

3.2.3 运行安装

[root@oracle10g ~]# xhost +
access control disabled, clients can connect from any host
[root@oracle10g ~]# su - oracle
[oracle@oracle10g ~]$ cd soft/database/
[oracle@oracle10g database]$ ./runInstaller

选择自定义安装。

image.png

3.2.4 指定库存目录和凭证

image.png

3.2.5 选择安装类型

image.png

3.2.6 指定ORACLE HOME目录

image.png

3.2.7 安装前自动检查系统配置

image.png

3.2.8 仅安装数据库软件

image.png

3.2.9 开始安装数据库软件

image.png

3.2.10 按照提示运行root.sh

image.png

root新开一个会话,执行脚本:

image.png

执行完后返回安装界面点击ok

3.2.11 完成安装

image.png

4 升级数据库软件打补丁R205

刚刚安装的是R201的数据库软件,现在打补丁升级到R205版本。也可以选择后续再升级,但是后续升级比较耗时,而且失败的话还要做数据库恢复,相对比较麻烦,建议在安装好数据库软件后就进行升级。

4.1 停止oracle相关服务

一般升级前需要做好数据备份,并把oracle相关服务和数据库关掉。

  • 数据备份

  • 关闭相关服务

    • 关闭监听:lsnrctl stop
    • 关闭oem:emctl stop dbconsole
    • 关闭sqlplus
  • 关闭数据库:shutdown immediate

检查是否全部都关闭了,如:ps -ef | grep sqlplus

4.2 解压升级包

[oracle@oracle10g ~]$ cd soft/
[oracle@oracle10g soft]$ unzip p8202632_10205_Linux-x86-64.zip

4.3 执行脚本开始升级

[oracle@oracle10g soft]$ cd Disk1/
[oracle@oracle10g Disk1]$ ./runInstaller

直接点击下一步。

image.png

4.3.1 指定升级名字和路径

点击下一步。

image.png

4.3.2 邮箱和支持密码

取消勾选mo支持,点击下一步。

image.png

点击yes。

image.png

4.3.3 升级前配置检查

一定要确保所有检查项都通过,点击下一步。

image.png

4.3.4 开始升级

升级概要,点击install开始升级。

image.png

4.3.5 root执行指定目录下脚本

root用户新开一个会话,执行提供的脚本。

image.png

回车 + 三个y。

image.png

执行完后回到安装页面,点击ok,最后退出。

4.3.6 查看数据库软件版本

可以看到版本为10gR205。

image.png

5 监听配置

创建数据库实例前应该把监听给配了。创建数据库过程应该遵循这个顺序: 先配置监听, 再配置ASM 实例, 最后创建数据库实例, 这样可以减少出错的概率。

5.1 添加一个监听

netca调出安装界面。

[oracle@oracle10g Disk1]$ netca

保持监听配置选项,点击下一步。

image.png

5.2 添加一个监听

add添加,点击下一步。

image.png

5.3 指定监听名字、传输协议和端口

选择默认的即可。

image.png

image.png

image.png

5.4 完成监听添加

选择no,不配置其他监听。

image.png

5.5 查看监听状态

监听添加成功,并且已经启动。

image.png

查看监听相关文件:

[oracle@oracle10g ~]$ ls $ORACLE_HOME/network/admin/
listener.ora  samples  shrept.lst  tnsnames.ora

6 dbca创建数据库

[oracle@oracle10g ~]$ dbca

选择创建一个数据库。

image.png

6.1 选择数据库类型

默认。

image.png

6.2 指定数据库名

指定数据库名为orcl。

image.png

6.3 指定是否安装OEM

不安装oem。

image.png

6.4 指定数据库系统帐号密码

指定使用统一的密码。

image.png

6.5 指定文件系统存储方式

image.png

6.6 指定创建的数据库文件位置

默认。

image.png

6.7 设置闪回和归档

设置闪回区位置和大小:FRA和2G。先不开归档。

image.png

6.8 选择是否创建样例用户

不创建。

image.png

6.9 设置数据库主要参数

内存设置:

image.png

内存进程数:

image.png

内存字符集:

image.png

6.10 一路默认

image.png

image.png

image.png

image.png

image.png

7 后续检查

7.1 检查监听

image.png

7.2 检查数据库状态

SQL> select dbid,name,log_mode,version_time,open_mode from v$database;DBID NAME      LOG_MODE     VERSION_T OPEN_MODE
---------- --------- ------------ --------- ----------
1693663630 ORCL      NOARCHIVELOG 10-APR-24 READ WRITESQL> select instance_name,version,status from v$instance;INSTANCE_NAME    VERSION           STATUS
---------------- ----------------- ------------
orcl             10.2.0.5.0        OPEN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/308464.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音视频无水印采集拓客软件|视频批量下载提取工具

抖音视频无水印批量采集拓客软件助力高效营销&#xff01; 随着抖音平台的崛起&#xff0c;视频已成为各行各业进行营销的重要工具。但是&#xff0c;传统的视频下载方式往往效率低下&#xff0c;无法满足快速获取大量视频的需求。针对这一问题&#xff0c;我们开发了一款视频无…

【PDF.js】PDF文件预览

【PDF.js】PDF文件预览 一、PDF.js二、PDF.js 下载1、下载PDF.js2、在项目中引入3、屏蔽跨域错误 三、项目中使用四、说明五、实现效果 使用PDFJS实现pdf文件的预览&#xff0c;支持预览指定页、关键词搜索、缩略图、页面尺寸调整等等。 一、PDF.js 官方地址 文档地址 二、PD…

JVM、maven、Nexus

一、jvm简介 1.应用程序申请内存时出现的三种情况&#xff1a; ①OOM:内存溢出&#xff0c;是指应用系统中存在无法回收的内存或使用的内存过多&#xff0c;最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了&#xff0c;系统会提示内存溢出&#xff0c…

react query 学习笔记

文章目录 react query 学习笔记查询客户端 QueryClient获取查询客户端 useQueryClient异步重新请求数据 queryClient.fetchQuery /使查询失效 queryClient.invalidateQueries 与 重新请求数据queryClient.refetchQueries 查询 QueriesuseQuery查询配置对象查询的键值 Query Key…

最前沿・量子退火建模方法(1) : subQUBO讲解和python实现

前言 量子退火机在小规模问题上的效果得到了有效验证&#xff0c;但是由于物理量子比特的大规模制备以及噪声的影响&#xff0c;还没有办法再大规模的场景下应用。 这时候就需要我们思考&#xff0c;如何通过软件的方法怎么样把大的问题分解成小的问题&#xff0c;以便通过现在…

模型 洛萨达比例

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。积极和消极的平衡&#xff0c;左右着你们的关系。 1 洛萨达比例的应用 1.1 企业团队管理之洛萨达比例的应用 一个软件开发公司的团队经理注意到团队的士气和生产力有所下降。此时洛萨达比例是在2.9:…

故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法

故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法 目录 故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现基于小波…

关于机器学习/深度学习的一些事-答知乎问(二)

进化算法与深度强化学习算法结合如何进行改进&#xff1f; &#xff08;1&#xff09;进化算法普遍存在着样本效率低下的问题&#xff0c;虽然其探索度较高&#xff0c;但其本质为全局随机性搜索&#xff0c;需要在整个回合结束后才能更新其种群&#xff0c;而深度强化学习在每…

Linux系统——Elasticsearch企业级日志分析系统

目录 前言 一、ELK概述 1.ELK简介 2.ELK特点 3.为什么要使用ELK 4.完整日志系统基本特征 5.ELK工作原理 6.Elasticsearch介绍 6.1Elasticsearch概述 6.2Elasticsearch核心概念 7.Logstash介绍 7.1Logstash简介 7.2Logstash主要组件 8.Kibana介绍 8.1Kibana简介 …

爬取学习强国视频小示例

因为需要爬取的视频数量并不是很大&#xff0c;总共需要将131个视频下载下来&#xff0c;所以就直接去手动找找视频的地址和名称保存下来的。由于页面是动态加载的&#xff0c;所以我们无法在网站源码中直接找到视频的超链接。设想是可以用Selenium模拟浏览器点击进行动态加载获…

Java基础(一)--语法入门

文章目录 第一章、语法入门一、Java简介1、JVM2、Java程序执行过程3、JDK4、JRE5、JDK、JRE和JVM三者关系 二、Java常量与变量1、标识符2、关键字3、保留字4、变量5、数据类型6、常量 三、运算符1、算术运算符2、赋值运算符3、关系运算符4、逻辑运算符5、条件运算符6、运算符的…

SpringMVC(一)【入门】

前言 学完了大数据基本组件&#xff0c;SpringMVC 也得了解了解&#xff0c;为的是之后 SpringBoot 能够快速掌握。SpringMVC 可能在大数据工作中用的不多&#xff0c;但是 SSM 毕竟是现在就业必知必会的东西了。SpringBoot 在数仓开发可能会经常用到&#xff0c;所以不废话学吧…

CSS盒模型(详讲)

目录 概述&#xff1a; 内容区&#xff08;content&#xff09;&#xff1a; 内边距&#xff08;paddingj&#xff09;&#xff1a; 前言&#xff1a; 设置内边距&#xff1a; 边框&#xff08;border&#xff09;&#xff1a; 前言&#xff1a; 示例&#xff1a; 外边…

机器人路径规划:基于Q-learning算法的移动机器人路径规划,可以自定义地图,修改起始点,提供MATLAB代码

一、Q-learning算法 Q-learning算法是强化学习算法中的一种&#xff0c;该算法主要包含&#xff1a;Agent、状态、动作、环境、回报和惩罚。Q-learning算法通过机器人与环境不断地交换信息&#xff0c;来实现自我学习。Q-learning算法中的Q表是机器人与环境交互后的结果&#…

51单片机 DS1302

DS1302 实现流程 将提供的ds1302底层参考程序拷贝到工程下 注意在ds1302.c中可能硬件引脚没有定义&#xff0c;注意去看一下。还有头文件什么的在ds1302中记得加上 参考代码&#xff1a; #include "reg52.h" #include "ds1302.h"unsigned char Write_…

「 典型安全漏洞系列 」14.NoSQL注入漏洞详解

NoSQL注入是一个漏洞&#xff0c;攻击者能够干扰应用程序对NoSQL数据库进行的查询&#xff0c;本文我们将研究如何测试一般的NoSQL漏洞&#xff0c;然后重点研究如何利用MongoDB中的漏洞&#xff08;MongoDB是最流行的NoSQL数据库&#xff09;。 1. 什么是NoSQL注入 NoSQL注入…

AI大模型探索之路-实战篇:基于CVP架构-企业级知识库实战落地

目录 前言 一、概述 二、本地知识库需求分析 1. 知识库场景分析 2. 知识库应用特点 3. 知识库核心功能 三、本地知识库架构设计 1. RAG架构分析 2. 大模型方案选型 3. 应用技术架构选型 4. 向量数据库选型 5. 模型选型 三、本地知识库RAG评估 四、本地知识库代码落地 1. 文件…

Electron+React 搭建桌面应用

创建应用程序 创建 Electron 应用 使用 Webpack 创建新的 Electron 应用程序&#xff1a; npm init electron-applatest my-new-app -- --templatewebpack 启动应用 npm start 设置 Webpack 配置 添加依赖包&#xff0c;确保可以正确使用 JSX 和其他 React 功能&#xff…

【C++学习】深入理解C++异常处理机制:异常类型,捕获和处理策略

文章目录 ♫一.异常的提出♫二.异常的概念♫三.异常的使用♫3.1 异常的抛出和捕获♫3.2.异常的重新抛出♫3.3异常安全♫3.4 异常规范 ♫4.自定义异常体系♫5.C标准库的异常体系♫6.异常的优缺点 ♫一.异常的提出 之前&#xff1a; C语言传统的处理错误的方式与带来的弊端&…

C# WebSoket服务器

WebSocket是一种在单个TCP连接上进行全双工通信的协议WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单, 允许服务端主动向客户端推送数据。在WebSocket API中, 浏览器和服务器只需要完成一次握手, 两者之间就直接可以创建持久性的连…