CRK计算机,crk_world
標簽:
sendfile
gzip
it
nginx模塊開發
filter
拖了很久,也沒有補全這一塊。今天在這篇里簡單描述下nginx
output_filter中關于輸出響應的部分,換言之就是ngx_chain_t和ngx_buf_t的用法。本人對這一塊經歷了無知不解、一知半解,現在終于進化到三知兩解的程度了,即與大家分享,希望大家以后別走彎路。
首先是copy
filter,這個模塊是極為重要的。因為首先這個模塊的執行時機非常早,是第三個被執行的filter,更重要的是,這個模塊的執行結果會影響后續filter模塊的處理邏輯。我們先來看ngx_buf_t結構。ngx_buf_t中有兩個標示內容存放地點的標志:memory和in_file,分別代表內容在內存中,或者在文件中。我們的常識是,每個ngx_buf_t中的memory和in_file標志只能二者選其一,非此即彼。然而在copy
filter執行以后,可能產生出memory和in_file標志同時為1的狀態。
可能大家覺得暈了。這里我來介紹一下這個狀態的前因后果。nginx有一個sendfile指令,指示調用sendfile()系統調用直接發送靜態文件。sendfile()系統調用是內核函數,它直接在內核中將指定句柄的文件內容(全部或部分)讀出,并發送到另一個文件句柄。這個操作節省了數據在內核空間和用戶空間
標簽:
android
apk
簽名
1. 簽名有三個文件
MANIFEST.MF
XXX.SF
XXX.RSA
這很多文章都提到了
2. MANIFEST.MF文件是在打jar包或者apk包的時候生成的,但是只生成基本內容(這里是jar打包)
Manifest-Version: 1.0
Created-By: 1.8.0_45-internal
(Oracle Corporation)
3.
signapk或者jarsigner以后,會生成XXX.SF和XXX.RSA文件,同時補全MANIFEST.MF的內容。
4.
XXX.RSA也可能是XXX.DSA或者XXX.PGP,對于普通jar包是這樣,具體是看簽名所用的算法。Android好像只能RSA。
5. 這三個文件的關系很多博客都有介紹。但有一個問題沒有解決,就是XXX.SF文件是必須的嗎?
完全看不出有什么必要性,直接用XXX.RSA對MANIFEST.MF簽
標簽:
編譯器
32位
64位
arm
x86
記一下,免得后面又混亂了。
只是參數列表定長的函數,變參的參數不在這里。
arm:
32位:
R0-R4對應從左往右的4個參數。剩下的參數壓棧,順序從右往左,每項占4B。
64位:
從左往右的前8個參數對應W0-W7(int),或者X0-X7(long)
標簽:
nginx模塊開發
it
nginx中有兩個容易混淆的cleanup回調的數據結構。
其中一個是ngx_pool_cleanup_t
另一個是ngx_http_cleanup_t
從語義上講,前者是內存池析構,后者是http析構。
如果混淆了,那么會遭遇到兩個回調執行時機上的細微差別。這個差別在于
ngx_pool_cleanup_t的回調具體是在log完成之后調用,
而ngx_http_cheanup_t的回調是在log完成之前。
這個差異意味著,
在log階段的一些數據引用可能出現異常,無法理解的異常,非常難查到原因的異常,結局非常悲慘。
OVER
(2015-03-21 09:33)
兩年沒有寫博客了,原因是密碼忘了。兩年沒有找回密碼的原因是新浪博客的找回密碼太麻煩了,用著沒有一絲愉悅感。這樣就怠慢的讀者,很多想法已經忘記,也不可追溯了。
我感覺現在的系統越來越難用了。罪魁在哪里?在手機。為什么有這種感覺,是因為現在娛樂在手機、支付在手機、衣食住行在手機、地理定位在手機、身份驗證在手機。什么都在手機,手機成了生活的中心點。結果,手機很輕,手機也很重啊。而且現在的系統,一旦只有一部分功能移到手機上,在整體易用度上都會打折扣。為什么,因為之前完成一件事用一個平臺就好,現在需要涉及多個平臺,最典型的就是找回密碼。先綁定手機,然后手機交互一輪,接著PC再交互一輪,沒手機就沒辦法證明我自身了嗎,我受不了。
(2015-03-21 09:12)
標簽:
nginx模塊開發
it
配置解析階段:
Syntax: resolver address ... [valid=time];
ngx_http_core_resolver()
clcf->resolver = ngx_resolver_create()
? 設置cleanup的handler (ngx_resolver_cleanup)
? 初始化保存域名節點信息的紅黑樹 (r->name_rbtree)
? 初始化重傳和過期隊列 (r->name_resend_queue
r->name_expire_queue)
? 設置超時事件的handler (ngx_resolver_resend_handler)
? 解析dns server的ip并設置到地址數組 (r->udp_connections)
? 解析參數 (valid, ipv6 等)
請求構造階段:
proxy_pass http://$host;
ngx_resolver_ctx_t ctx 每次域名解析都會生成這個結構體,
直接malloc,未使用r->pool.
ctx = ngx_resolve_start()
? 如果$host是ip地址, 直接設置ctx->quick = 1,
表示后續邏輯不需要走dns解析邏輯.
? 如果r->udp_connections 不存在, 返回NGX_NO_RESOLVER,
最終請求返回502.
初始化ctx參數
1.
nginx是異步非阻塞的多進程模型,每個進程并發的服務于多個請求,所以所有nginx模塊都必須是異步非阻塞。如果有阻塞操作,開線程或創建進程執行。
2.
nginx可以服務于HTTP所有版本,包括0.9、1.0、1.1。所有模塊都需要考慮這一點,避免與HTTP某些版本不兼容,尤其是0.9版本。
(2013-06-07 15:11)
標簽:
烏鎮
游記
游烏鎮就是游江南水鄉。當然你不一定非去烏鎮不可,比如蘇州也可以看到。但是如果確定游烏鎮,我的這篇游記可能能夠幫到你。
烏鎮位于浙江省桐鄉市,在杭州以北,上海以西,寧波的西北,交通都很方便(話說不方便也沒法搞旅游業)。比如杭州去烏鎮,在九堡汽車站上車,1.5小時就到了。烏鎮很小,從烏鎮汽車站到景區(東柵)走路最多30分鐘,還有315路公交車可到景區。另外,烏鎮很多民宿都是提供接送業務的。所以,跟團、叫麻木都是沒有意義的。
烏鎮可以玩一天,但可以分開到兩天玩。我是懶人,分兩天玩的。如果是分兩天,那就需要預訂一個住的地方,一般在去哪網上訂個民宿就好了。不建議住在景區,一晚上600人民幣起,景區旁邊的標間才一百多一晚,而且房子都還可以。我是住在西柵旁邊慈云路上的一家民宿,業主姓汪,租的20平米的標間,價格178RMB。烏鎮的民宿很多都是家族生意,比如我住的這家,就是業主他們家什么二嬸、三姨、五娘舅的家宅的某一層打掃出來統一出租的。我們到了烏鎮汽車站,老板出來接我們到民宿。
說完了住宿,然后說門票。日票西柵120,東柵
(2013-03-21 13:30)
標簽:
tcp_timestamps
tcp_tw_recycle
it
前天看了普空的博客
http://blog.sina.com.cn/u/2015038597
文章涉及到兩個proc參數,tcp_timestamps和tcp_tw_recycle,原來這兩個參數對tcp協議的影響還是非常大的,這里再總結一下。
tcp_tw_recycle的用處是快速回收TIME_WAIT狀態的套接字。tcp_tw_recycle的工作原理是依據RTO(Retransmission
Timeout)來計算TIME_WAIT狀態的等待時間,而非默認超時TCP_TIMEWAIT_LEN(Linux 2.6.32
內核是60s),因為RTO是根據RTT計算得到,所以這個超時是practical的,而不是ideal的。但是tcp_tw_recycle只有在打開tcp_timestamps時才是有效的(可能是因為不用timestamps算出來的RTT不準確,因為考慮到超時重發的情況下不用timestamps是算不出來當前RTT的)。
tcp_timestamps則可以使tcp包攜帶一個發送時間的options,這個options在ACK報文中也會echo出來,所以打開tcp_timestamps以后,tcp協議棧可以根據ACK報文中的options計算RTT。
此外,如普空的博客所說,同時使用tcp_tw_recycle和tcp_timestamps還會對tcp協議棧造成另外一個影響,對于相同IP的syn報文(為什么不將port納入考量),tcp協議棧會根據timestamps時戳扔掉逆序的包。所以需要處
標簽:
nginx
模塊
開發
剖析
配置
I have finished part 1 of chapter 11. this part is mainly about
the common flow of configuration parser. in particular, it
describes all the results reaped by ngx_http_block() function in
detail, because they are vital when nginx processes
requests.
I expect people will understand how nginx understands its
configuration, and what it has built at the edge between its parser
and processor.
the next step is to talk about the servers[] and the
locations[], so we will understand how nginx fabricate its control
data.
wish you like it. call me when you have any problem or advice
about this passage.
(2013-03-07 10:30)
標簽:
時間輪
時間輪就好比傳統的齒輪鐘表。在傳統鐘表上,齒輪的每一個齒都對應了一段時間,而且這個對應是有周期性的。比如控制秒鐘旋轉的齒輪,輪上每一個齒在每分鐘內對應其中固定的一秒。從這個類比可以看到,時間輪有兩個維度:時間寬度和時間精度。這兩個維度可以用三個因素中的任意兩個來確定:時間輪旋轉一周所經過的時間、時間輪每一個齒對應的時間、時間輪中的齒的數量。
時間輪是怎樣組織數據的?作為一個計算機數據結構,時間輪的實現是一個開鏈哈希表。哈希的鍵是數據的時間因素與時間輪的時間精度的模,而時間輪的開鏈是一個雙鏈表。那么時間輪有什么特點?最大的特點是時間輪的維護非常簡單。因為哈希的時間復雜度是O(1),雙鏈表的添刪的時間復雜度也是O(1),那么又說明什么問題呢?后面結合具體的例子來講。時間輪第二大特點是在齒數固定的情況下,時間寬度和時間精度不可兼得。固定齒輪數量可以控制時間輪的內存消耗,鑒于這個目的,所以齒輪數一般都不會很大。有個特例,是計算機時鐘,他使用一個2^32-1個齒輪的時間輪,但是它不需要存儲值,因為它的值就是鍵值。所以使用時間輪時,我們必須考慮好內存占用、時間精度和時間
總結
以上是生活随笔為你收集整理的CRK计算机,crk_world的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 酒店前厅计算机的作用,浅谈智能化对酒店前
- 下一篇: 计算机二级通app打不开,计算机二级通a