静态 / 动态 Web 服务

静态Web服务:nginx,apache,IIS,lighttpd,tengine,openresty-nginx

动态Web服务:tomcat,resin,php,weblogic,jboss

静态Web服务 无法直接处理动态请求(调用数据库),动态Web服务 可以直接处理动态请求(调用数据库)

Nginx 简介

Nginx (engine x) 是一个可靠的高性能的 HTTP 和反向代理 服务, 用于部署轻量级的 Web服务器 / 反向代理服务器 以及 电子邮件(IMAP/POP3)代理服务器,特点是占有内存少,并发能力强

Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Python 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务

Nginx 的优点

  • Nginx非常轻量,功能模块少,源代码仅保留HTTP与核心模块代码,其余不够核心代码会作为插件来安装
  • 代码模块化 (易读,便于二次开发,对于开发人员非常友好)
  • Nginx技术成熟,具备的功能是企业最常使用而且最需要的
  • 适合当前主流架构趋势,微服务、云架构、中间层
  • 统一技术栈,降低维护成本, 降低技术更新成本
  • Nginx 采用了Epoll 模型(Apache 采用了 Select 模型)

Nginx 和 Apache 的比较

区别有点多,传送去看一下

Nginx 的安装

选择 Nginx 官网的安装包,若不想源码安装,可以配置yum仓库,配置nginx官方源,可以省去安装依赖包的麻烦

# 添加 Nginx 官方源(稳定版)
[root@web01 ~]# vi /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true # 安装
[root@web01 ~]# yum -y install nginx # Nginx 管理
[root@web01 ~]# systemctl enable nginx
[root@web01 ~]# systemctl start nginx
[root@web01 ~]# systemctl stop nginx
[root@web01 ~]# systemctl restart nginx
[root@web01 ~]# systemctl reload nginx
[root@web01 ~]# nginx
[root@web01 ~]# nginx -s stop
[root@web01 ~]# nginx -s reload # 查看 Nginx 配置文件格式是否有错误
[root@web01 logrotate.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful # 查看 Nginx 的版本
[root@web01 logrotate.d]# nginx -v
nginx version: nginx/1.18.0 # 查看 Nginx 的版本 以及 编译信息(可选模块,文件目录,......)
[root@web01 logrotate.d]# nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
[root@web01 logrotate.d]#

Nginx 相关文件

# 查看 nginx 所有的 配置文件
[root@web01 ~]# rpm -qc nginx
/etc/logrotate.d/nginx
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/etc/nginx/win-utf
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug # nginx 的主配置文件
[root@web01 ~]# ll /etc/nginx/nginx.conf
-rw-r--r-- 1 root root 643 Apr 21 23:05 /etc/nginx/nginx.conf
# nginx 的默认配置文件(删除即可)
[root@web01 ~]# ll /etc/nginx/conf.d/default.conf
-rw-r--r-- 1 root root 1093 Apr 21 23:05 /etc/nginx/conf.d/default.conf
# nginx 的代理文件
[root@web01 ~]# ll /etc/nginx/*_params
-rw-r--r-- 1 root root 1007 Apr 21 23:07 /etc/nginx/fastcgi_params
-rw-r--r-- 1 root root 636 Apr 21 23:07 /etc/nginx/scgi_params
-rw-r--r-- 1 root root 664 Apr 21 23:07 /etc/nginx/uwsgi_params
# nginx 的字符编码文件
[root@web01 ~]# ll /etc/nginx/*-*
-rw-r--r-- 1 root root 2837 Apr 21 23:07 /etc/nginx/koi-utf
-rw-r--r-- 1 root root 2223 Apr 21 23:07 /etc/nginx/koi-win
-rw-r--r-- 1 root root 3610 Apr 21 23:07 /etc/nginx/win-utf
# 返回给浏览器 Content Type 的MIME类型
[root@web01 ~]# ll /etc/nginx/mime.types
-rw-r--r-- 1 root root 5231 Apr 21 23:07 /etc/nginx/mime.types
# nginx 相关命令文件
[root@web01 ~]# ll /usr/sbin/nginx*
-rwxr-xr-x 1 root root 1342640 Apr 21 23:07 /usr/sbin/nginx
-rwxr-xr-x 1 root root 1461544 Apr 21 23:07 /usr/sbin/nginx-debug
# nginx 日志文件
[root@web01 ~]# ll /var/log/nginx/*.log
-rw-r----- 1 nginx adm 588 May 14 15:24 /var/log/nginx/access.log
-rw-r----- 1 nginx adm 1212 May 14 22:25 /var/log/nginx/error.log
# nginx 日志切割配置文件
[root@web01 ~]# ll /etc/logrotate.d/nginx
-rw-r--r-- 1 root root 351 Apr 21 23:05 /etc/logrotate.d/nginx

Nginx 主配置文件

Nginx 的主配置文件即 /etc/nginx/nginx.conf,共划分为三个模块,分别是CoreModule(核心模块)EventModule(事件驱动模块)HttpCoreModule(http内核模块)

让我们再次传送到一篇详细 Blog !!!

######################### CoreModule(核心模块)##############################
# Nginx进程所使用的用户
user nginx;
# Nginx运行的work进程数量(建议与CPU数量一致或auto)
worker_processes 1;
# Nginx错误日志存放路径,以及相应的日志级别(warn,error,crit)
# 共有 debug,info,notice,warn,error,crit 几个级别,如果是 warn 输出 warn 级别以后的全部级别内容
# error_log /log/nginx/error.log notice;
# error_log /log/nginx/error.log info;
error_log /log/nginx/error.log warn;
# Nginx服务运行后,进程ID存储文件的位置
pid /var/run/nginx.pid; ######################### EventModule(事件驱动模块) ##########################
events {
# 每个worker进程支持的最大连接数
worker_connections 25535;
# 事件驱动模型, 默认为 epoll
use epoll;
} ######################### HttpCoreModule(http内核模块) ######################
http {
# http 传输的文件类型
include /etc/nginx/mime.types;
# 默认文件类型,当文件类型未定义时使用此类型(text.txt 在浏览器中点击可以直接查看, text 则会被下载 )
default_type application/octet-stream;
# 指定 nginx 日志的输出格式,可以自定义(diy)
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format diy '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 指定访问日志的路径,以及日志的输出格式
access_log /var/log/nginx/access.log main;
access_log /var/log/nginx/diy_access.log diy;
# 开启/关闭 高效文件传输模式
sendfile on;
# 搭配sendfile使用
#tcp_nopush on;
# 客户端连接超时时间(长连接)
keepalive_timeout 65;
# 是否开启 gzip 压缩
#gzip on;
# 包含以下目录中所有以.conf结尾的 子配置文件
include /etc/nginx/conf.d/*.conf;
}

Nginx 虚拟主机配置文件

# 虚拟主机配置
server {
# 监听 80端口
listen 80;
# 域名,或者IP
server_name localhost;
# 字符集
#charset koi8-r;
# 日志 ( server 中的局部 access_log 配置,若此处配置,主配置文件 nginx.conf 中 HTTP层中的局部 access_log 配置失效)
#access_log /var/log/nginx/host.access.log main;
# 网站访问的 URL 路径 (根目录)
location / {
# 站点目录
root /usr/share/nginx/html;
# 默认页面
index index.html index.htm;
# 日志 ( location 中的局部 access_log 配置,若此处配置,server 中的局部 access_log 配置失效)
#access_log /var/log/nginx/host.access.log main;
}
# 网站访问的 URL 路径 (/abc 目录)
location /abc {
# 站点目录
root /usr/share/nginx/html/abc;
# 默认页面
index abc.html abc.htm;
# 日志 ( location 子 URL 路径(/abc目录)中的局部 access_log 配置,若此处配置, location URL 父路径(根目录)中的局部 access_log 配置失效)
#access_log /var/log/nginx/abc.access.log main;
}
# 404 错误页面的路径
#error_page 404 /404.html; # redirect server error pages to the static page /50x.html
# 5xx 错误页面的路径
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# PHP 代理配置
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#} # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

虚拟主机配置方案

基于IP

基于服务器主机多 IP 的配置,两种方式:

  • 配置单台服务器多网卡,多 IP 的方式
  • 配置单台服务器单网卡,多 VIP 的方式
# 配置多网卡(略)
# 配置单网卡,多 VIP 的方式
[root@web01 ~]# ifconfig eth0:0 10.0.0.77/24
[root@web01 ~]# ifconfig eth0:1 10.0.0.88/24
[root@web01 ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:dd:24:04 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.7/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 10.0.0.77/24 brd 10.0.0.255 scope global secondary eth0:0 <------- 虚拟网卡 eth0:0
valid_lft forever preferred_lft forever
inet 10.0.0.88/24 brd 10.0.0.255 scope global secondary eth0:1 <------- 虚拟网卡 eht0:1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fedd:2404/64 scope link
valid_lft forever preferred_lft forever # 虚拟主机配置文件
[root@web01 ~]# ll /etc/nginx/conf.d/
total 12
-rw-r--r-- 1 root root 122 May 15 11:10 blog.wqh.com.conf
-rw-r--r-- 1 root root 126 May 15 11:09 download.wqh.com.conf
-rw-r--r-- 1 root root 124 May 15 11:10 search.wqh.com.conf
[root@web01 ~]# cat /etc/nginx/conf.d/blog.wqh.com.conf
server {
listen 80;
server_name 10.0.0.7;
location / {
root /code/blog;
index index.html;
}
}
[root@web01 ~]# cat /etc/nginx/conf.d/download.wqh.com.conf
server {
listen 80;
server_name 10.0.0.77;
location / {
root /code/download;
index index.html;
}
}
[root@web01 ~]# cat /etc/nginx/conf.d/search.wqh.com.conf
server {
listen 80;
server_name 10.0.0.88;
location / {
root /code/search;
index index.html;
}
}
# 检查 nginx 格式
[root@web01 ~]# nginx -t
# 重新加载 nginx 服务
[root@web01 ~]# systemctl reload nginx

配置单台服务器单网卡,多 VIP 的方式:

基于端口

[root@web01 ~]# cat /etc/nginx/conf.d/blog.wqh.com.conf
server {
listen 81;
server_name 10.0.0.7;
location / {
root /code/blog;
index index.html;
}
}
[root@web01 ~]# cat /etc/nginx/conf.d/download.wqh.com.conf
server {
listen 82;
server_name 10.0.0.7;
location / {
root /code/download;
index index.html;
}
}
[root@web01 ~]# cat /etc/nginx/conf.d/search.wqh.com.conf
server {
listen 83;
server_name 10.0.0.7;
location / {
root /code/search;
index index.html;
}
}
# 重新加载 nginx 服务
[root@web01 ~]# systemctl reload nginx

基于域名

# 需要在 C:\Windows\System32\drivers\etc\hosts 文件中添加本地域名解析,才可以用网页打开
[root@web01 ~]# cat /etc/nginx/conf.d/blog.wqh.com.conf
server {
listen 80;
server_name blog.wqh.com;
location / {
root /code/blog;
index index.html;
}
}
[root@web01 ~]# cat /etc/nginx/conf.d/download.wqh.com.conf
server {
listen 80;
server_name download.wqh.com;
location / {
root /code/download;
index index.html;
}
}
[root@web01 ~]# cat /etc/nginx/conf.d/search.wqh.com.conf
server {
listen 80;
server_name search.wqh.com;
location / {
root /code/search;
index index.html;
}
}
# 重新加载 nginx 服务
[root@web01 ~]# systemctl reload nginx

Nginx 日志管理

log_format 详解

# log_format 日志输出格式 语法
Syntax: log_format name [escape=default|json] string ...;
Default: log_format combined "...";
Context: http
# 主配置文件中默认的 log_format 日志输出格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; # 各字段含义
$remote_addr # 记录客户端IP地址
$remote_user # 记录客户端用户名
$time_local # 记录通用的本地时间
$time_iso8601 # 记录ISO8601标准格式下的本地时间
$request # 记录请求的方法以及请求的http协议
$status # 记录请求状态码(用于定位错误信息)
$body_bytes_sent # 发送给客户端的资源字节数,不包括响应头的大小
$bytes_sent # 发送给客户端的总字节数
$msec # 日志写入时间。单位为秒,精度是毫秒。
$http_referer # 记录从哪个页面链接访问过来的
$http_user_agent # 记录客户端浏览器相关信息
$http_x_forwarded_for #记录客户端IP地址
$request_length # 请求的长度(包括请求行, 请求头和请求正文)。
$request_time # 请求花费的时间,单位为秒,精度毫秒
# 注:如果Nginx位于负载均衡器,nginx反向代理之后, web服务器无法直接获取到客 户端真实的IP地址。
# $remote_addr获取的是反向代理的IP地址。 反向代理服务器在转发请求的http头信息中,
# 增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址。 # access_log 日志配置 语法(文件路径[path],日志输出格式[format],缓冲区大小[buffer].......)
Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off; <--------------------- 不开启日志
Default: access_log logs/access.log combined;
Context: http, server, location, if in location, limit_except
# 日志配置示例
server {
listen 80;
server_name www.wqh.com; #将当前的server网站的访问日志记录至对应的目录,使用main格式
access_log /var/log/nginx/www.wqh.com.log main;
location / {
root /code/html/;
} #当有人请求 favicon.ico 时,不记录日志, favicon.ico 一般是网站标签的图标
location /favicon.ico {
access_log off;
return 200;
}
}

nginx 日志切割

# 查看系统日志切割配置文件
[root@web01 ~]# cat /etc/logrotate.d/nginx
# 日志切割的文件路径
/var/log/nginx/*.log {
# 切割日志的周期,此处为 1 天
daily
# 忽略丢失日志 ———————— 执行切割日志的过程中,任何错误将被忽略,如果日志不存在,则忽略该日志的警告信息
missingok
# 留存的日志的周期数,此处为 52 天
rotate 52
# 已经切割的日志,将使用 gzip 进行压缩
compress
# 延迟 gzip 压缩,不立即执行压缩
delaycompress
# 忽略空文件 ———————— 如果日志文件为空,则不会切割(不做操作)
notifempty
# 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件(access.log-xxxxxxxx.gz)
create 640 nginx adm
sharedscripts
# 在所有其它指令完成后,postrotate 和 endscript 里面指定的命令将被执行
postrotate
if [ -f /var/run/nginx.pid ]; then
# USR1 通常被用来告知应用程序重载配置文件,此处重载 nginx 守护进程(重新加载 access_log 配置)
kill -USR1 `cat /var/run/nginx.pid`
# 重新加载 access_log 配置后,就会重新创建一个新的日志文件,写入日志内容
fi
endscript
} # 其他字段含义
compress # 通过gzip压缩转储以后的日志
nocompress # 不压缩
copytruncate # 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate # 备份日志文件但是不截断
create mode owner group # 转储文件,使用指定的文件模式创建新的日志文件
nocreate # 不建立新的日志文件
delaycompress 和 compress # 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress # 覆盖 delaycompress 选项,转储同时压缩。
errors address # 专储时的错误信息发送到指定的Email 地址
ifempty # 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty # 如果是空文件的话,不转储
mail address # 把转储的日志文件发送到指定的E-mail 地址
nomail # 转储时不发送日志文件
olddir directory # 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir # 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript # 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript # 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily # 指定转储周期为每天
weekly # 指定转储周期为每周
monthly # 指定转储周期为每月
rotate COUNT # 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list 让logrotate # 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
size SIZE # 当日志文件到达指定的大小时才转储,bytes(缺省)及KB(sizek)或MB(sizem) # 日志切割的文件(没有 16号 日志文件(为空),没有切割)
[root@web01 ~]# ll /var/log/nginx/
total 36
-rw-r----- 1 nginx adm 8012 May 17 17:09 access.log
-rw-r----- 1 nginx adm 234 May 14 15:24 access.log-20200515.gz
-rw-r----- 1 nginx adm 4299 May 15 11:10 access.log-20200516
-rw-r----- 1 nginx adm 7213 May 17 17:09 error.log
-rw-r----- 1 nginx adm 341 May 14 22:25 error.log-20200515.gz
-rw-r----- 1 nginx adm 2770 May 15 11:10 error.log-20200516

Nginx 服务介绍的更多相关文章

  1. Nginx服务配置文件介绍

    LNMP架构应用实战——Nginx服务配置文件介绍 nginx的配置文件比较简单,但功能相当强大,可以自由灵活的进行相关配置,因此,还是了解下其配置文件的一此信息 1.Nginx服务目录结构介绍 安装 ...

  2. Nginx服务安装配置

    1.Nginx介绍 Nginx是一个高性能的HTTP和反向代理服务器,由俄罗斯人开发的,第一个版本发布于2004年10月4日.Nginx由于出色的性能,在世界范围内受到了越来越多人的关注,其特点是占有 ...

  3. Nginx-->基础-->理论-->001:Nginx基本介绍

    一.nginx基本介绍 传统上基于进程或者线程模型架构的web服务通过每进程或者每线程处理并发连接请求,这势必毁在网络和I/O操作时产生阻塞,其另外一个必然结果则是对内存和CPU的利用率低下,产生一个 ...

  4. nginx服务部署 说明

    第1章 常用的软件 1.1 常用来提供静态服务的软件   Apache :这是中小型Web服务的主流,Web服务器中的老大哥,   Nginx :大型网站Web服务的主流,曾经Web服务器中的初生牛犊 ...

  5. Nginx服务编译安装、日志功能、状态模块及访问认证模式实操

    系统环境 [root@web ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@web ~]# uname -a Linux d ...

  6. Chris Richardson微服务翻译:微服务介绍

    作者简介:Chris Richardson,世界著名的软件架构师,经典著作<POJOS IN ACTION>的作者,cloudfoundry.com 的创始人 微服务目前正受到大量的关注, ...

  7. 我眼中的 Nginx(四):是什么让你的 Nginx 服务退出这么慢?

    张超:又拍云系统开发高级工程师,负责又拍云 CDN 平台相关组件的更新及维护.Github ID: tokers,活跃于 OpenResty 社区和 Nginx 邮件列表等开源社区,专注于服务端技术的 ...

  8. 【实战分享】又拍云 OpenResty / Nginx 服务优化实践

    2018 年 11 月 17 日,由 OpenResty 主办的 OpenResty Con 2018 在杭州举行.本次 OpenResty Con 的主题涉及 OpenResty 的新开源特性.业界 ...

  9. Nginx的介绍和安装详解

    [介绍+安装]Nginx的介绍和安装详解   == 介绍和安装 == Nginx是一个自由.开源.高性能及轻量级的HTTP服务器及反转代理服务器, 其性能与IMAP/POP3代理服务器相当.Nginx ...

随机推荐

  1. 解决ROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'creat table study_record( id int(11) not null

    之前一直用的好好的,突然就出现了这个错误: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual tha ...

  2. 超微服务器重置ipmi登录密码

    超微服务器的ipmi登录密码不对,需要重置但是bios内并没有找到可以设置的选项. 以下是解决办法: 安装IPMITOOLyum install ipmitool -y 执行以下命令加载模块:modp ...

  3. In Search of an Understandable Consensus Algorithm" (https://raft.github.io/raft.pdf) by Diego Ongaro and John Ousterhout.

    In Search of an Understandable Consensus Algorithm" (https://raft.github.io/raft.pdf) by Diego ...

  4. What is the difference between Serialization and Marshaling?

    How to serialize and deserialize JSON using C# - .NET | Microsoft Docs https://docs.microsoft.com/en ...

  5. (Sql Server)SQL FOR XML

    摘要:sql中的for xml语法为表转化为xml提供了很好的支持,当然使用同样的程序语言也能够达到同样的效果,但是有了for xml将使得这一切更加的方便. 主要内容: Select 的查询结果会作 ...

  6. libevent源码学习之event

    timer event libevent添加一个间隔1s持续触发的定时器如下: struct event_base *base = event_base_new(); struct event *ti ...

  7. 本地代码上传GitHub

    0. 登录 git config --global user.name "GitHub用户名" git config --global user.email "GitHu ...

  8. HDU1814和平委员会

    题目大意: 有n对的人,编号从1-2*n,m对的人之间互相不喜欢,每对人中必徐选1个人加入和平委员会,求字典序最小的解 -------------------------------- 2-SAT问题 ...

  9. Spring听课笔记(tg)AOP

    好文:https://blog.csdn.net/javazejian/article/details/56267036 通过一个实例来理解 1.  需求:实现算术计算器,可以加减乘除,同时记录日志 ...

  10. 分布式缓存 — Docker

    Docker 是一个开源项目,它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护. Doc ...