LNMP的技术讲解

Nginx网站服务

理论部分:

在之前的学习中,我们学习了在linux平台下搭建了LAMP这样的动态网站平台。apache通过超强的稳定性深受企业喜欢,但是随着互联网的发展,apache已经很难承受太多的并发发文连接,自从2007年Nginx发布的1.0版本以来,Nginx越来越手企业的推捧这是为什么呢?今天我们就来解答并且学会如何部署LNMP这样的一个web服务平台。

Nginx服务的基础

Nginx由俄罗斯的lgor Sysoev开发,专为性能而开发,其最著名的特点是他的稳定性和低系统资源消耗,以及对并发连接的高处立能力,在一些大型的门户网站纷纷选择Nginx来提供web服务,像现在比较知名的新浪、淘宝、京东、迅雷、搜狐等大型企业都是使用的Nginx来提供WEB服务。经过测试Nginx的并发访问理论上是可以达到50000个。今天我们就一起来学习一下如何部署LNMP这样的一个动态网站环境。

一、安装及运行控制

1、nginx的编译安装

Nginx的最新版本为1.6.0其安装文件可以从官网下载http://www.nginx.org下载,今天我们就来使用最新版本1.6.0为例,介绍Nginx的安装和运行控制。

今天的环境是一个实验环境使用vmwareworkstarion来模拟这样的一个虚拟环境,以CENTOS6.5版本的操作系统为例。

实验拓扑

图1

以上就是我们今天的实验环境,我的主机是base基本安装,我已经安装好了gcc编译器,如果你的系统中在我们编译安装的时候出现错误请提前安装gcc编译器。

1)安装支持的软件

在编译安装Nginx之前我们需要做一些准备工作,需要安装pcre、zlib等软件包的支持,因此预先进行安装一遍提供库文件和头文件。我们之前已经学习过YUM软件仓库了,我们直接使用YUM的方式进行安装

[[email protected] ~]# yum -y install pcre-develzlib-devel

2)创建程序用户和组

Nginx服务默认以nobody身份运行,建议为其创建专门的用户账号,一遍准确的控制权限等问题。我们救你nginx这个用户为例。不建立宿主目录,不允许登录操作系统。

[[email protected] ~]# useradd  -M -s /sbin/nologin  nginx

3)编译安装nginx

nginx我已经下载好了在我的root目录下,在配置的过程中,我们指定安装的目录为/usr/local/ningx运行的用户和组均设为nginx启用--with-http_stub_status_module模块,便于查看服务器的连接信息,具体请参考./configure --help的帮助信息。

[[email protected] ~]# cd nginx-1.6.2

[[email protected] nginx-1.6.2]#./configure  --prefix=/usr/local/nginx--user=nginx --group=nginx --with-http_stub_status_module && make&& make install

编译完成之后可以输入echo $? 看一下返回值是否为0

为了很好的控制服务器的正常运行,我们可以将主程序nginx创建一个链接文件到/usr/local/sbin目录下或者直接修改PATH环境变量这里我们选择第二种直接修改PATH环境变量。

[[email protected] nginx-1.6.2]#                                   echo    "PATH=$PATH:/usr/local/nginx/sbin">> /etc/profile

[[email protected] nginx-1.6.2]# . /etc/profile

2、Nginx的运行控制

1)检查配置文件

可以通过主程序nignx对nginx的配置文件进行检测 -t选项用来对配置文件进行检查,以便找出配置错误的地方未知文件nginx.conf默认位于安装目录下的conf子目录下。若要检查其他位置的配置文件可以结合-c选项。

[[email protected] nginx-1.6.2]# nginx  -t

nginx: the configuration file /usr/local/nginx/conf/nginx.confsyntax is ok

nginx: configuration file/usr/local/nginx/conf/nginx.conf test is successful

[[email protected] nginx-1.6.2]#

2)启动、停止nginx

直接运行主程序nginx就可以运行nginx服务器

   ps:如果服务器中已存在httpd服务则需要执行停止或者是卸载操作。

   我们将nginx服务启动并查看其网络连接状态

[[email protected]]# nginx

[[email protected]]# netstat -anptl | grep "nginx"

tcp        0     0 0.0.0.0:80                 0.0.0.0:*                   LISTEN      4843/nginx

通过上面的输出可以看出nginx的默认监听端口为80进程名为nginx。nginx默认启动一个工作进程

nginx的服务已经启动起来了我们可以在客户端进行测试了,测试的前提是防火墙允许目标端口80入站。

[[email protected]]# iptables -F

[[email protected]]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

通过客户端访问或者通过linux的访问工具进行访问。我们通过linux自带的访问工具访问。

我们需要使用yum进行安装

[[email protected]]# yum -y install elinks

开始访问:

图2

这是在命令行界面下显示的,不是很漂亮,已经成功的访问了,这样我们的nginx就已经能够正常的运行了,我们并没有做任何的配置。ctrl+c退出

既然服务能够启动,既然也能够停止或者是重新启动

我们通过killall 的方式停止或重启nignx服务程序发送HUB信号表示重载服务发送QUIT信号表示结束服务

[[email protected]]# killall -s HUP  nginx

[[email protected]]# killall -s QUIT  nginx

前者表示重载或者表示杀死,当nginx服务运行的时候PID号默认存放在logs/目录下的nginx.pid文件中,因此若改用kill命令也可以根据进程号来进行控制

[[email protected]]# kill -9 $(cat /usr/local/nginx/logs/nginx.pid)

3)使用nginx脚本

为了更好的控制服务我们可以用到之前学习的脚本,实现自动化的执行。

vim/etc/init.d/nginx

#!/bin/bash

#chkconfig: 2345 99 20

#description: Nginx Service Control Script

PROG="/usr/local/nginx/sbin/nginx"

PIDF="/usr/local/nginx/logs/nginx.pid"

case"$1" in

if [ $? -eq 0 ]

then

echo "Nginx service alreadyrunning."

else

$PROG -t &> /dev/null

if [ $? -eq 0 ] ; then

$PROG

echo "Nginx service startsuccess."

else

$PROG -t

fi

fi

if [ $? -eq 0 ]

then

kill -s QUIT $(cat $PIDF)

echo "Nginx service stopsuccess."

else

echo "Nginx service already stop"

restart)

$0 stop

$0 start

;;

status)

if [ $? -eq 0 ]

then

echo "Nginx service is running."

else

echo "Nginx is stop."

fi

;;

reload)

if [ $? -eq 0 ]

then

$PROG -t &> /dev/null

if [ $? -eq 0 ] ; then

kill -s HUP $(cat $PIDF)

echo "reload Nginx configsuccess."

else

$PROG -t

fi

else

echo "Nginx service is not run."

fi

;;

*)

echo "Usage: $0{start|stop|restart|reload}"

exit 1

esac

以上内容就是根据进程文件以及过滤网络连接状态进行控制。写好之后将其添加为系统服务并赋予执行权限。开机自动运行。

[[email protected]]# chmod  +x /etc/init.d/nginx

[[email protected]]# chkconfig  --add nginx

[[email protected]]# chkconfig  nginx on

这样一来我们就可以通过nginx脚本来启动停止nginx服务了。方法是在执行时天加相应的start、stoprestart、reload参数。

二、配置文件nginx.conf

nginx的配置文件与apache的配置文件组成大不相同他的路径在/usr/local/nginx/conf/nginx.conf中,包括全局配置、I/O时间配置和HTTP配置这三大内容,配置语句的格式为关键字 "值"(末尾以;结束)以#开头表示注释。

1、全局配置

有各种配置语句组成,不使用特定的定界标记。全局配置包括Nginx服务的运行用户、工作进程数、错误日志、PID存放位置等参数等基本设置。

#user  nobody;                    //运行的程序用户

worker_processes  1;                 //启用的工作进程

#error_log  logs/error.log;       //错误日志的文件位置

#pid        logs/nginx.pid;       //PID文件存放的位置

全局的配置内容很少其中

第一条定义的是运行nginx的程序用户,由于我们在编译安装时已经指定了运行的程序用户,所以这里以#号注释掉了。

第二条定义了开启的工作进程数量,一般工作进程数量是根据CPU的核数决定的,如果是四核的CPU那么我们可以开启的进程数量为4-8个进程数为CPU的倍数一般为一倍。如果网站的访问量不大设置为1已经够了。关于如何实现过多的并发访问连接我们在介绍http配置的时候会介绍到。

第三条定义了错误日志的文件位置,一般情况下我们直接#号注释掉,因为我们主要还是搭建虚拟主机更多一些,所以这个配置项几乎用不到,直接默认即可。

第四条定义了pid文件的位置,默认的位置logs/的nginx。pid文件。

以上几条配置就是全局的配置。

2、I/O事件配置

使用"events { }" 界定标记,用来指定Nginx进程的响应模型,每个进程的连接数量等限制,对于2.6及以上版本的内核,建议使用epool模型以提高性能,每个进程的连接数应以实际的情况为主,一般在10000以下,默认为1024个。

events {

worker_connections  4096;

use epoll;

}

如工作进程=8每个工作进程处理4096个连接则已经超过了nginx正常提供服务的连接数量已经超过3万个(4096*8=32768)具体的情况还需要根据实际的硬件配置来决定。

通过这里也能看出来nginx的并发访问量的优势吧!apache的工作方式是,有多少个连接就需要开启多少个子进程来响应客户端非常消耗服务器资源。

3、HTTP配置

使用"http{}"界定标记,包括访问日志、HTTP端口、监听地址、网页目录、默认字符集、连续保持时间,以及虚拟主机的配置PHP解析等一些列事情,其中大部分配置语句都包含在了server{}的界定标记中了。

http {

include       mime.types;

default_type  application/octet-stream;

   log_format  main ‘$remote_addr - $remote_user [$time_local] "$re

quest" ‘                                    //定义访问日志格式

   ‘$status $body_bytes_sent"$http_referer" ‘

  ‘"$http_user_agent""$http_x_forwarded_for"‘;

    access_log  logs/access.log  main;         //访问日志位置

sendfile        on;

#tcp_nopush     on;

#keepalive_timeout  0;

keepalive_timeout  65;                      //连接保持超时时间

#gzip on;

server {

listen       80;                         //监听端口

server_name  www.benet.com;                //站点域名

charset utf-8;                          //字符集

access_log  logs/host.access.log  main;     //访问日志位置和格式

  location / {                              //根目录配置

root  /var/www/benet;                    //网站文档根目录

index index.html index.htm;              //默认索引页

}

error_page   500 502 503 504  /50x.html;  //内部错误的反馈界面

location = /50x.html {                  //错误页面配置

root  html;                        //错误文档目

}

}

}

这里我面我们说一下localtion / 和location= /50x.html

location /  他的作用是匹配来自客户端的任意请求,我们在客户端的游览器输完url路径时在回车的一瞬间在默认会多出一个/出来如图3

图3

这就是localtion  /的作用定义了客户端请求的内容,比如现在我在/后面随便输入一些内容,看一下会怎么样。

图4

因为不存在asdasda这个目录这时服务器就会提示找不到客户端请求的目录,这时就会用到了error_page 500 502 503 504 /50x.html 这个配置项,当用户的访问请求找不到的时候就会输出图4的界面,如果输入一个存在的目录这时就会响应。

具体的localtion配置项我们在之后还有一个例子再具体的看一下,我们在看一下

location=  /50x.html 这个就是一个精确匹配了,如果在url路径后面输入了他,那么服务器就只能响应这个请求,不能在匹配其他。

图5

这就是精确匹配,如果中间出现一个字符错误看一下图6

图6

这是就会显示404错误,在location / 中所搜不到这个请求,之后由错误页面给吃应答。

具体我们在nginx的访问状态在进行解释

四、访问状态及虚拟主机应用

1、nginx的访问状态统计

我们在编译安装的时候添加了--with-http_stub_status_module模块就是用来统计客户端访问服务器的情况。,要使用次用能需要在配置文件中做一下简单的修改。

location/status {

stub_status on;                 //打开状态统计功能

access_log off;                 //关闭此位置的日志记录

}

location /status  就是客户端请求的时候可以输入sta开头就可以了,这是就会默认匹配status目录。我们先进性保存之后进行语法检测如果没有问题,则进行重新启动服务

[[email protected]]# service nginx restart

Nginxservice stop success.

Nginxservice start success.

重启服务之后使用客户端访问

图7

正常访问

图8

以status开头也是没有任何问题的,这就是location / = 的作用

上面的三个数字的解释

第一个1  已处理的连接数

第二个1  成功的tcp三次握手的次数

第三个7 已处理的请求数量

2、基于域名的虚拟web主机

使用Nginx搭建的虚拟主机服务器时,每个虚拟web站点拥有一个server{}配置端,各自监听IP地址、端口号可以改变,当然网站名也是不同的,下面通过搭建两个站点来演示

www.accp.com www.lzg.com

首先为他们准备站点根目录以及默认索引页

[[email protected]]# mkdir /var/www/{accp,lzg}

[[email protected]]# echo "<h1>www.accp.com</h1>" >/var/www/accp/index.html

[[email protected]]# echo "<h1>www.lzg.com</h1>" >/var/www/lzg/index.html

vim  /usr/local/nginx/conf/nginx.conf

……省略部分内容

在最后一个}前一行添加

server {

listen          80;

server_name     www.accp.com;

charset         utf-8;

access_log      logs/accp.com.log;

location / {

root    /var/www/accp;

index   index.html index.php;

}

}

server {

listen          80;

server_name     www.lzg.com;

charset         utf-8;

access_log      logs/lzg.com.log;

location / {

root    /var/www/lzg;

index   index.html index.php;

}

}

由于是基于域名的虚拟主机所以需要dns解析域名,前面已经学过如何搭建DNS了,今天为了简便直接在win7上修改hosts文件了。

C:\Windows\System32\drivers\etc\hosts

192.168.1.1           www.accp.com

192.168.1.1           www.lzg.com

图9

图10

以上就是访问的结果。

构建LNMP平台及应用部署

一、构建LNMP网站平台

就像构建LAMP平台一样,构建LNMP平台也需要linux系统、mysql服务器、PHP解析环境,区别在于nginx和php协同工作的配置上,我们开始部署

1、安装mysql数据库

mysql之前我们在搭建LAMP时已经做过了,这里我就不解释相关知识点了

1)编译安装mysql

[[email protected]~]# cd cmake-2.8.12

[[email protected]]# ./configure  &&make && make install

[[email protected]]# cd ../mysql-5.5.38

[[email protected]]# cmake -DCMAKE=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8  -DDEFAULT_COLLATION=utf8_general_ci-DWITH_EXTRA_CHARSETS=all && make && make  install

2)建立mysql的主配置文件和程序文件

[[email protected]]# cp support-files/my-medium.cnf /etc/my.cnf

cp:overwrite `/etc/my.cnf‘? y

[[email protected]]# cp support-files/mysql.server /etc/init.d/mysqld

[[email protected]]# chmod  +x/etc/init.d/mysqld

[[email protected]]# chkconfig  --add mysqld

ch[[email protected]]# chkconfig  mysqld on

[[email protected]]# echo "PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile

[[email protected]]# . /etc/profile

3)初始化数据库

[[email protected]]# useradd  -M -s/sbin/nologin  mysql

[[email protected]]# /usr/local/mysql/scripts/mysql_install_db  --user=mysql --basedir=/usr/local/mysql/--datadir=/usr/local/mysql/data/

[[email protected]]# service mysqld start

4)启动mysql服务

StartingMySQL....                                         [  OK  ]

[[email protected]]# mysqladmin -u root password ‘123.abc‘

//为root设置密码

2安装PHP解析环境

较新版本(r如5.3)的PHP已经自带FPM(Fastcgi Manager Fastcgi进程管理器)模块用来对PHP解析实例进行管理优化解析效率,在配置php时应该添加--enable-fpm配置项一起用此模块

1)编译安装php

我们今天以5.3.28为例

yum -yinstall gd libxml2-devel libjpeg-devel libpng-devel

[[email protected]]# ./configure  --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql--with-cofnig-file-path=/usr/local/php5 --enable-mbstring --enable-fpm--with-jpeg-dir=/usr/lib && make && make install

2)建立配置文件并加载zend

zend的版本应该和php的版本在一个版本上

[[email protected]]# cp php.ini-development /usr/local/php5/php.ini

[[email protected]]# cp/root/ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x/ZendGuardLoader.so  /usr/local/php5/lib/php/

vim  /usr/local/php5/php.ini

添加两行

zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so

zend_loader.enable=1

3、配置nginx支持php环境

Nginx本身并没有像apache那样内置php模块,要让Nginx能够解析PHP网页,有两种方法其一,充当中介,将收到的php请求转发给apache让其代为解析其二使用php-fpm调用本机的php环境

1)启用php-fpm进程

[[email protected]]# cd /usr/local/php5/etc/

[[email protected]]# useradd  -M -s /sbin/nologin  php

[[email protected]]# cp php-fpm.conf.default php-fpm.conf

vimphp-ftp.conf

ps:一行前面的数字是行号

……省略部分内容

25  pid = run/php-fpm.pid            //php-fpm的进程文件位置

140 user =php                         //运行用户

141 group= php                     //运行组

222 pm.start_servers= 20           //动态方式下时开启的进程数

217 pm.max_children = 50             //静态方式下开启的进程数量

227 pm.min_spare_servers= 10          //最少空闲进程数

232 pm.max_spare_servers= 30          //最多空闲进程数

修改完成之后进行保存

优化执行程序执行路径

[[email protected]]# ln -s /usr/local/php5/bin/* /usr/local/bin/

[[email protected]]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/

[[email protected]]# php-fpm

[[email protected]]# netstat -anpt | grep php-fpm

tcp        0      0127.0.0.1:9000             0.0.0.0:*                   LISTEN      121056/php-fpm    

php-fpm的端口号为9000进程名为php-fpm

在php-fpm.conf文件中 .pid配置指出了pid信息的存放位置,对应的实际路径为/usr/local/php5/var/run/php-fpm.pid。根据上诉信息我们可以修改nginx脚本,以便在启动nginx时将php-fpm一起进行启动

vim/etc/init.d/nginx

……省略部分内容

在esac后面添加

PROG_FPM="/usr/local/sbin/php-fpm"

PIDF_FPM="/usr/local/php5/var/run/php-fpm.pid"

case"$1" in

start)

netstat -anpt | grep"php-fpm" &> /dev/null &&  pgrep "php-fp

m"&> /dev/null

if [ $? -eq 0  ]; then

echo "php-fpm is running."

else

$PROG_FPM

fi

;;

stop)

netstat -anpt | grep"php-fpm" &> /dev/null && pgrep "php-fpm"

if [ $? -eq 0 ];then

killall -s  QUIT php-fpm

echo "php-fpm is down."

fi

;;

esac

2)配置Nginx支持php解析

无论是将php页面交给LAMP平台去解析还是调用本地的php-fpm进程进行解析,都需要在server{}配置段添加location设置

第一种方法将php请求交给192.168.1.100    //模拟,主机并不存在

vim/usr/local/nginx/conf/nginx.conf

在虚拟主机的server{}中添加

location ~\.php$ {

proxy_passhttp://192.168.1.100:80;

}

第二种方法(调用本地的php-fpm进程)

location ~\.php$ {                 //访问.php页面的配置端

root            /var/www/lzg;    //php网页文档根目录

fastcgi_pass    127.0.0.1:9000; //php-fpm的监听地址

fastcgi_index   index.php;      //php默认首页

include         fastcgi.conf;     //包括fastcgi.conf样本配置

}

我们今天选择第二种方法,这两种方法都比较常用,今天的环境只适合演示第二种。

3)PHP页面访问测试

可以在PHP文档根目录下创建一个测试页用来连接数据库

vim  /var/www/lzg/index.php

$link=mysql_connect(‘localhost‘,‘root‘,‘123.abc‘);

if($link)echo "恭喜你数据库连接成功啦!!";

mysql_close();

?>

[[email protected]]# service nginx reload

图11

连接成功了,这就证明我们的LNMP部署的是没有任何问题的。

二、在LNMP平台中部署Web应用

1、下载并部署程序代码

我们就以一套影视程序天空网路其官方网站为http://www.skyuc.com/

可以在上面下载这套影视程序。

将下载的SKYUC程序文件解压到/root目录下,之后将解压目录下的wwwroot移动到/var/www/lzg/skyuc然后对几个目录的属主和属组进行调整,以允许nginx和php-fpm拥有写入权限。

[[email protected]~]# unzip SKYUC_3.4.2_for_php5.3.zip

[[email protected]~]# mv SKYUC.v3.4.2.SOURCE/wwwroot/ /var/www/lzg/skyuc

[[email protected]~]# cd /var/www/lzg/skyuc/

[[email protected]]# chown -R php:php  admincp/ data/templates/ upload/

2、创建数据库和数据库用户

为了降低Web应用程序对数据库的风险,建议设置专用的数据库及授权用户,而不是使用root用户。建立skyucdb数据库授权jerry用户拥有所有权限

[[email protected]]# mysql -u root -p123.abc

mysql>create database skyucdb;

Query OK,1 row affected (0.04 sec

mysql>grant all on skyucdb.* to [email protected]‘localhost‘ identified by ‘123.abc‘;

Query OK,0 rows affected (0.07 sec)

3、安装web应用

在客户端游览器输入www.lzg.com/skyuc/install进行安装

图12

接受许可协议,并点击下一步

图13

检测系统环境,如果前面不多权限进行调整的时候,这里会出现相关错误

图14

这里就是刚才创建的数据库和拥有权限的用户,下面设置的是后台管理员的用户和密码。

图15

出现这里就表明安装成功了,这里可以选择前往后台或者前台。

这里选择前往前台

图16

成功访问到了首页。

总结一下:

Nginx默认的工作进程只有一个,可以通过主配置文件中的全局配置进行修改,进程数根据CPU的核数进行设置,每一个进程可以同时进行多个连接,可以通过events配置端进行设置。

Nginx最大的并发访问量理论上为3万——五万,但是还需要根据实际的物理配置。

Nginx的虚拟主机的实现方式就是在nginx.conf中的server{}段进行设置,每个配置端可以独立监听端口、ip地址、当然了域名必须不同。

Nginx默认不支持PHP,所以在编译安装时需要启用--enable-fpm模块,要想解析客户端的PHP请求,需要通过两种方法实现处理PHP请求

1、将php请求转发给其他LAMP平台

2、调用本地的PGP-FPM进程进行解析。

这两种方法都需要在server{}配置段实现。

最后说一点Nginx其实还可以配置成代理服务器,这一点我们之后在进行讲解,其实实现php的第一种方法就是一种代理的一种。

文中应该是有错别字的,请不要见怪,因为这都是熬夜做出来的,有点困了,文中的知识点有不足的地方请各位大神多多指教

时间: 2024-10-07 05:31:50

LNMP的技术讲解的相关文章

OpenGL核心技术之SSAO技术讲解(二)

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 接着OpenGL核心技术之SSAO技术讲解(一)继续给读者分析SSAO技术,我们需要沿着表面法线方向生成大量的样本.就像我们在这个教程的开始介绍的那样,我们想要生成形成半球形的样本.

shell-网上lnmp一键安装讲解

shell-网上lnmp一键安装讲解 #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin       #设置系统环境变量本文出处:www.ksharpdabu.info export PATH     # # Check if user is root if [ $(id -u) != "0" ]; then                           #通过判断

OpenGL核心之SSAO技术讲解(一)

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 在使用引擎开发产品时,我们经常会使用环境光作为游戏场景的太阳光使用,环境光照是我们加入场景总体光照中的一个固定光照常量,它被用来模拟光的散射(Scattering).在现实中,光线会

3D轮廓检测技术讲解

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 今天我们将讨论一种可以检测到3D物体的轮廓方式. 为了使事情变得更清楚,我指的是一个3D对象的轮廓,当光从任意方向落在它上面时. 移动光源可能会相应地改变轮廓. 这完全不同于在图像空

双缓冲技术讲解

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 首先要搞清楚计算机运行原理,计算机载运行时是将将最大的任务分解成多个任务,然后一个接一个地执行. 一个典型的例子,每个游戏引擎必须解决的问题是渲染. 当游戏画出用户看到的世界时,比如

机器人定位技术讲解

定位技术是机器人实现自主定位导航的最基本环节,是机器人在二维工作环境中相对于全局坐标的位置及其本身的姿态.目前SLAM (Simultaneous Localization and Mapping即时定位与地图构建)是业内主流的定位技术,有激光SLAM和视觉SLAM之分. 什么是激光SLAM? 激光SLAM脱胎于早期的基于测距的定位方法(如超声和红外单点测距).激光雷达(Light Detection And Ranging)的出现和普及使得测量更快更准,信息更丰富.激光雷达采集到的物体信息呈现

橙色优学:PS扣图技术讲解,六种方法你都知道吗?

橙色优学今天来聊聊PS的抠图技术,学ps的朋友都应该知道抠图技术.橙色优学总结了下面六种抠图的方法,供你参考. 1.橡皮擦工具 橡皮擦工具,更多时候跟“抠图”看似没啥关系,然而,竟然它能起到“擦除”的作用,那么就完全可以用来抠图去背了,它的键盘快捷键是:单按一个字母键“e”,简单粗暴地擦掉你不想要的背景或其他画面部分就可以了.不要哪儿,就擦哪,橡皮擦工具用起来方便,选择了它,调节画笔大小和硬度即可开始擦擦擦.然而,缺点也比较明显,很难做到精细化抠图,对边缘的处理也不是太好,而且擦掉就真的没了,原

SpringCloud(三)常用系统架构技术讲解

author:QYX  以前我们使用过单体架构,把多个系统放到一个容器中集体调用,这种模式开发简单,适合小型应用但不利于扩展且代码耦合,后来我们引入和垂直应用架构,系统间相互独立,通过前端统一调用,虽然解决了高并发的问题,也可以针对水平扩展,但也存在着系统间相互独立,且重复开发的缺点,现在我们就来认识最常用的架构模式:分布式架构和微服务架构. 分布式架构 SOA(面向服务的架构) SOA全称为Service-Oriented Architecture,即面向服务的架构,它可以根据需求通过网络对松

WD NAS网络存储RAID5*4恢复技术讲解

一:故障现象: 4号盘报红灯,离线. 整个NAS数据无法访问.二:分析方法:1:将4块硬盘取下来,采用PC3000检测.发现4号硬盘前面有大量坏道,  1 2 3号硬盘没有问题.  2:将4号盘全盘镜像出来.3:将1 2 3号硬盘与4号镜像盘进行分析.4:采用winhex分析,查找十六进制"0000C0"  这是就是查找 i-节点,因为i-节点很有规律.分析结果如下图 通过上面分析,我们就知道这个RAID5相关参数了, 块大小128扇区, 盘序:1 2 3 4.  左同步128. 注: