windows应用程序中

2019-12-19 10:21栏目:关于计算机

在C#windows应用程序中:1.每1分钟检查测验叁个景观flag,如果flag=1,则实践函数warning(卡塔尔(英语:State of Qatar),那样的话就能够发生操作积压,请问应该如何管理吧??2.自己的需求是时时到处监测flag,借使直接是flag=1,就再三举办warning(卡塔尔,举例检查测量试验了11遍flag都是1,只进行贰遍warning(卡塔尔国,检测了贰12次flag都以1,只进行两遍warning(卡塔尔国,当然要是检验到flag是0,则马上终止实施warning(卡塔尔(قطر‎,请问笔者该如何做吗?3.也正是说前台检查实验某些状态flag,借使间接是1,持续warning,假若是0,则停止。

编译自:
ngx_http_rewrite_module

目录

  1. 模块指令:

    • break
    • if
    • return
    • rewrite
    • rewrite_log
    • set
    • uninitialized_variable_warn
  2. 内部贯彻

简介


ngx_http_rewrite_module 模块可用来校正 HTTP 央浼的 ULANDI,协理正则表达式相配。改良今后,再次来到重定向指令。
该模块也支撑条件式地选取安插。

ngx_http_rewrite_module 模块的命令按如下顺序进行管理:

  • 在 server 区块中,按梯次实施;
  • 再次实践:
    • 依附 HTTP 央浼的 UENVISIONI,寻觅对应的 location;
    • 在找到的 location 中,ngx_http_rewrite_module 模块的一声令下按梯次执行;
    • 在 location 区块中,假如 HTTP 要求的 U奇骏I 被重写,将另行整个手续,但不超越 10 次。

模块指令


Syntax: break;
Default: —
Context: server, location, if

悬停当前 ngx_http_rewrite_module 模块指令集的拍卖。

若果该指令是在 location 中,那么在此个 location 中,对乞请的进一层处理将继续展开。

例子:

if ($slow) {
    limit_rate 10k;
    break;
}

Syntax: if (condition) { ... }
Default: —
Context: server, location

若条件判定为真,则实行花括号内的一声令下,况兼将括号内的铺排使用到 HTTP 央求上。if 指令中的配置是从上风流罗曼蒂克层配置中再而三的。

标准剖断式的犹如下种类:

  • 一个变量名;当变量值为0,或为空字符串时,条件为 false;(1.0.1 版早先,以0伊始的字符串被决断为 false)
  • 对字符串变量进行相比较,使用 =!=
  • 测量检验叁个变量是还是不是与多少个正则说明式相称,正则表明式前使用 ~~* 操作符,~* 对大小写不灵动。正则表达式可含蓄“反向引用”,使用 $1..$9 援用相称的字符串。也支撑 !~!~* 操作符,表示不相称。即使正则表明式中隐含 }; 符号,应运用单引号或双引号将正则表明式引用起来。
  • 测量检验三个文件是不是存在:-f and !-f
  • 测验贰个索引是不是留存:-d and !-d
  • 测量试验三个文本、目录、或标记链接文件是不是存在:-e and !-e
  • 测量试验二个文件是或不是可执行:-x and !-x

例子:

if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 break;
}

if ($http_cookie ~* "id=([^;] )(?:;|$)") {
    set $id $1;
}

if ($request_method = POST) {
    return 405;
}

if ($slow) {
    limit_rate 10k;
}

if ($invalid_referer) {
    return 403;
}

$invalid_referer 是七个内建变量,由 valid_referers 指令进行安装。

Syntax: return code [text];
return code URL;
return URL;
Default: —
Context: server, location, if

停下管理,重回状态码 code 给客商端。重回 444 将关闭该连接,并且不发送响应 header。

从 0.8.42 版最初,可钦赐重定向 UMuranoL (限于 301,302,303,307 状态码卡塔尔(قطر‎,或是钦定响应 body 为 text (对于除了前面包车型客车状态码之外的有所状态码卡塔尔(英语:State of Qatar)。无论是钦命重定向 U昂科拉L 照旧text,个中都得以分包变量。重定向的 URAV4L 能够钦点为基于本机的 U传祺I,这个时候,完整的重定向 U大切诺基L 是依据乞求 scheme ($scheme卡塔尔(قطر‎,server_name_in_redirect 和 port_in_redirect 指令来创设的。

对于有的时候重定向,二个 URL 和 302 状态码可被钦赐为唯生龙活虎的参数。那样的参数必须以 “http://”, “https://”, or “$scheme” 为起始。URL 可含蓄变量。

Only the following codes could be returned before version 0.7.51: 204, 400, 402 — 406, 408, 410, 411, 413, 416, and 500 — 504.

The code 307 was not treated as a redirect until versions 1.1.16 and 1.0.13.

另可参见 error_page 指令。

Syntax: rewrite regex replacement [flag];
Default: —
Context: server, location, if

如果 regex 相称了二个号召的 UTucsonI,该 U安德拉I 被沟通为 replacementrewrite 指令在布置文件中依照现身的逐朝气蓬勃实践。可利用 flag 中止进一步的管理。假设 replacement 以 “http://”, “https://” 为初步,将暂停管理,并再次来到重定向指令给顾客端。

flag 参数的值有:

  • last:停止当前 ngx_http_rewrite_module 模块指令集的拍卖,并为校订后的 UENVISIONI 寻觅新的十分的 location。

  • break:甘休当前 ngx_http_rewrite_module 模块指令集的拍卖,与 break 指令作用相通。

  • redirect:重返 “有的时候重定向” 及 302 状态码;仅当 replacement 不以 “http://”, “https://” 为发轫时,该 flag 才生效。

  • permanent:重回 “长久重定向” 及 301 状态码

例子:

server {
    ...
    rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 last;
    rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra  last;
    return  403;
    ...
}

但要是那几个指令被归入 “/download/” location 区块中,应将 last flag 替换为 break,不然 nginx 会不断循环,达到 10 次后,重临 500 error。

location /download/ {
    rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 break;
    rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra  break;
    return  403;
}

如果 replacement 包蕴号召参数,原本的乞请参数将被追加在后头。假如不期望扩大原本的伸手参数,可在 replacement 字符串的最终增多七个 “?” 符号,举个例子:

rewrite ^/users/(.*)$ /show?user=$1? last;

再唤醒一次,即便正则说明式中蕴涵 “}” 或 “;” 符号,应选取单引号或双引号将正则表明式援引起来。

Syntax: rewrite_log on | off;
Default:
rewrite_log off;
Context: http, server, location, if

是还是不是开启 ngx_http_rewrite_module 模块的日记,借使翻开,该模块的日记将被记录踏向 error_log 中,日志的等级为 notice

Syntax: set $variable value;
Default: —
Context: server, location, if

为变量赋值。value 可含蓄:文本,变量,或文本和变量的结合。

Syntax: uninitialized_variable_warn on | off;
Default:
uninitialized_variable_warn on;
Context: http, server, location, if

当有变量未有初阶化时,是不是记录日志。

内部落到实处


ngx_http_rewrite_module 模块的命令在铺排阶段被编写翻译进内部指令中,然后在对必要实行管理时被演说举办。解释指令的解释器是一个简便的虚构栈机器。

举例说,如下指令:

location /download/ {
    if ($forbidden) {
        return 403;
    }

    if ($slow) {
        limit_rate 10k;
    }

    rewrite ^/(download/.*)/media/(.*)..*$ /$1/mp3/$2.mp3 break;
}

将被翻译为如下的通令:

variable $forbidden
check against zero
    return 403
    end of code
variable $slow
check against zero
match of regular expression
copy "/"
copy $1
copy "/mp3/"
copy $2
copy ".mp3"
end of regular expression
end of code

有未有在乎到,limit_rate 指令并未没翻译,那是因为 limit_rate 指令不归属 ngx_http_rewrite_module 模块。由于有 if 区块,意气风发份独立的构造将被创建,假诺该 if 区块的条件判断为真,那么内部的配置将利用到乞求中,在那处的配备是 limit_rate = 10k。

指令:

rewrite ^/(download/.*)/media/(.*)..*$ /$1/mp3/$2.mp3 break;

可进一层优化,将第贰个 “/” 归入括号中:

rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 break;

相应的通令为:

match of regular expression
copy $1
copy "/mp3/"
copy $2
copy ".mp3"
end of regular expression
end of code

减掉了 copy "/" 这一手续。


版权消息
正文编写翻译自 nginx.org 的黄金年代部分,信守其原本的 licence 注脚: 2-clause BSD-like license

版权声明:本文由威尼斯网站发布于关于计算机,转载请注明出处:windows应用程序中