關於網路那些事...

網路行銷,SEO,網路趨勢,教學文章,網頁設計,生活時事

Docker - 執行 Nginx Webserver

執行 Nginx Container

-d 表示在背景( Detached )執行,Docker 預設前景( foreground )執行

-p 表示將本機 8080 port 的來源轉發到 container 的 80 port

--name 表示為 container 的名稱

--rm 表示當 exit container 時,會移除 container( incompatible with -d )

docker run -d -p 80:80 --name mywebserver nginx

//if need custom port (ex 3000) can do like this

docker run -d -p 3000:80 --name mywebserver nginx

由於 local 還沒有 nginx 的 image,因此Docker 會先執行檢查及下載 nginx image

Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
...下載安裝
Status: Downloaded newer image for nginx:latest

安裝完畢之後,就會直接對 nginx image 進行 instance 為 nginx container,並執行

檢查 Nginx Image 及 Container

前面執行 docker run .. 之後,

檢查是否已經存在 nginx images ,以及實體化的 nginx container

docker images

docker ps

這裡可以發現,nginx container 啟動之後,就會持續執行

這時就可以直接開啟瀏覽器前往 http://localhost 查看

啟動/停止 Container 運行

現在中斷執行中的 Nginx ,可以直接執行 Stop

docker container stop mywebserver

重新啟動 Nginx ,則執行 start

docker container start mywebserver

如果你喜歡我們的文章內容,請在這裡按個讚



Docker - MAC安裝與執行 Hello World

Docker 在 Mac 環境可以直接透過 Install Docker for Mac 來安裝

前往 Docker for Mac 下載 Docker.dmg 執行安裝

檢查版本

透過下列方式來檢查 docker 版本,確定安裝完畢

docker --version

docker-compose --version

docker-machine --version

如果你喜歡我們的文章內容,請在這裡按個讚



Docker - Remove all images and container

Delete all docker containers

docker rm $(docker ps -a -q)

Delete one containers by name

docker rm mycontainername

Delete all docker images

docker rmi $(docker images -q)

Delete images by name

docker rmi images_name

Check Image and containers

//all container (include un-run container)
docker ps -a
//on running container
docker ps

//all images
docker images

Remove Laradock file

rm -rf laradock/

如果你喜歡我們的文章內容,請在這裡按個讚



Docker - 常用指令介紹

【 Docker 】

關閉 Docker
docker-compose down

【 Container 】

建立container
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

OPTION:

-d 表示在背景( Detached )執行,Docker 預設前景( foreground )執行

-p 表示將本機 8080 port 的來源轉發到 container 的 80 port

--name 表示為 container 的名稱

--rm 表示當 exit container 時,會移除 container( incompatible with -d )


如果你喜歡我們的文章內容,請在這裡按個讚



Redis - PUBSUB、PUBLISH 介紹

Redis - PUBSUB、PUBLISH 介紹

PUBSUB

查詢訂閱狀態與發佈系統的狀態

> PUBSUB xxxchanne

PUBLISH

將訊息發送到指定的 channel

> PUBLISH xxxchanne "Message Say Hi"

如果你喜歡我們的文章內容,請在這裡按個讚



Redis - SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE、PUNSUBSCRIBE 訂閱功能介紹

Redis - SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE、PUNSUBSCRIBE 訂閱功能介紹

SUBSCRIBE 訂閱

Subscribe 允許 client 端訂閱一個或多個 channels

> SUBSCRIBE channel [channel ...]

當 client 端 subscribe 某個 channels 之後,

除了subscribe相關指令(subscribe, psubscribe, unsubscribe, punsubscribe ),

一律不允許使用其他 commands

> SUBSCRIBE xxxchannel 
Reading messages...(press Ctrl-C to quit)
1) "subscribe"
2) "xxxchannel"
3) (integer) 1
1) "message"
2) "xxxchannel"
3) "a"

PSUBSCRIBE

使用 PSUBSCRIBE 訂閱一個或多個頻道時,可以透過一些模式,來訂閱

? : 表示任一字元

  • : 表示多個任意字元 [nnnn] : 表示在這其中任一字元

例如:
H?llo 會包含 Hello, Hallo, Hbllo, Hcllo, .......
H*llo 會包含 Heeeeello, Hllo, Hxllo......
H[ae]llo 會包含 Hello, Hallo (但不包括 Hllo)

> PSUBSCRIBE xxxchannel
Reading messages...(press Ctrl-C to quit)
1) "psubscribe"
2) "xxxchannel"
3) (integer) 1

UNSUBSCRIBE

解除訂閱,可以指定要解除的channel,若沒有指定,則會解除全部已訂閱的channel

> UNSUBSCRIBE xxxchannel 
1) "unsubscribe"
2) "a"
3) (integer) 0

PUNSUBSCRIBE

可以解除所有 PSUBSCRIBE 的 channel

> PUNSUBSCRIBE xxxchannel
1) "punsubscribe"
2) "a"
3) (integer) 1

如果你喜歡我們的文章內容,請在這裡按個讚



Redis - pipeline 簡介

Redis - pipeline 簡介

Redis client 每次發送一筆 command 都會經過 發送命令> 命令列隊(排隊)> 執行 > 返回結果 ,這期間所需要的時間,就稱為RTT(Round Trip Time, 往返時間)

Redis 通常可以執行在微秒等級,但是在不同網路環境,就會因網路本身的傳輸限制而有所差異,因此才有Redis 性能瓶頸就是網路 一說

pipeline 可以將多筆資料同時發送出去,

如果不使用 pipelining,每一個command 從訪問資料結構、取得回覆,看起來耗費的流量都非常小,

但對於 socket I/O 而言,每個訪問都執行一次comman,占用的效能成本就相當大

當使用 pipelining,可以將多個指令組成一次發送出去,讓系統只需讀取一次 read(),並且將多個回覆內容也組成一次輸出 write()

雖然 pipeline 可以減少 RTT,減少IO調用次數

但是直接發送 command 只需要 Redis server 端處理,

透過 pipeline 則需要 server 端-client端 共同實現

因此仍須注意 pipeline 大小,是否會超過 Client端的緩存限制,若超過則緩存刷新或直接發送,可能會發生無法預期的問題

通常對於過大的 pipeline ,可以透過拆分來完成減少單次大小

Pipeline 代理

通常為了讓Redis可以有更好的負載能力,都會在 Redis 前面外加一個代理,例如: Codis Pipeline 緩存默認10K,3.1則是1024,Jedis 緩存默認為 8192


如果你喜歡我們的文章內容,請在這裡按個讚



NEW FIX 4.4 電文說明

NEW FIX 4.4 電文說明

台灣證券交易所規範了FIX通訊協定作業平台,簡稱FIX

證交所TCP/IP資訊網路透過MPLS架構,讓證交所與每個券商主機之間都設定了點對點固定IP VC(Virtual Circuit)連線

通常發起端為證券商,建立連線之後傳送登入訊息讓證交所驗證,

FIX協定為非同步傳輸方式,可連續傳送委託單

基本介紹如下:

FIX 組成

FIX tag 組成包括:

  • Header 表頭
  • Body 訊息內容
  • Trailer 表尾

Header 固定開頭為:

8=FIX.4.4<SOH>

Body 是要傳送的內容,基本格式為:

Key=Value<SOH>....

Trailer 結束使用的格式為:
其中 nnn 是透過 CheckSum 計算出的數值

10=nnn<SOH>

建立FIX連線

  • 建立連線
  • 驗證連線
  • 發起端傳送登入訊息(Logon)

FIX Session 流程

FIX Session 主要用於登入、交換訊息、登出:

  • Logon : 登入
  • Message exchange : 訊息交換
  • Logout : 登出

連線驗證

  1. 發起端無傳送登入訊息
    當發起端原本應該傳送登入訊息給接收端,超過60秒未傳送登入訊息,連線就會主動中斷
    這時發起端就要再重新連線

  2. 接收端驗證
    接收端會驗證登入訊息,若驗證成功會立即回覆 Logon 登入訊息,若驗證失敗會回覆 Logout 登出信息

  3. 開始同步
    發起端接收到 Logon 登入訊息後,就能開始傳送其他訊息

委託回報

當證券商連線到交易所下單,交易所會產生唯一的委託書號,隨著委託回報返回給券商

Checksum 機制

將 Checksum 之前的欄位二進位位元值總和,再除以 256 ,其餘值即 Checksum 檢核值

心跳訊息 (Heartbeat) 與 測試請求訊息(Test Request)

當證券商與證交所建立連線,證券商會傳送登入訊息,交易所會驗證身分,確認通過即提供回覆登入訊息給證券商

登入流程完畢之後,就會開始做訊息溝通

其中心跳訊息扮演的是偵測連線是否正常的腳色

在下方情況時,即啟動心跳訊息:

  • 任一連線方於10秒內沒有傳送任何資料,就要主動傳輸一筆心跳訊息

HeartBeat每10秒傳送一次 RowData

RowData 組成為:

  • Append-No : 隨機產生001-999 之間的一個三位數字
  • Key-Value : Append-No * Password 取千與百二位數字
  • Password : 證券商申請Fix Session 時候所輸入的密碼

任一連線方在心跳訊息(HeartBtInt) + 合理傳輸時間(20% HeartBtInt) 都沒有接到訊息時,

會在傳送測試請求(Test Request),並且預期要得到一筆帶有 TestReqID 的心跳訊息
如果再在心跳訊息(HeartBtInt) + 合理傳輸時間(20% HeartBtInt) 還是沒有接到訊息時,就確定連線失敗,並主動中斷,並重新在建立連線。

重送訊息 (Resend Request)

雙發若在通訊過程察覺訊息有遺漏,就能立即發送重送請求

  • 重送單筆訊息
  • 重送指定範圍內的訊息
  • 重送指定訊息後的所有訊息

例如:

從第七筆資料到資料結束為止,可以這樣描述:
BeginSDeqNo=7, EndSeqNo=0

從第七筆資料到第九筆資料為止,可以這樣描述:
BeginSDeqNo=7, EndSeqNo=9

重送每一段訊息後的所有訊息,可以這樣描述:
BeginSDeqNo=起始訊息, EndSeqNo=0

SESSION 拒絕訊息(Reject - Session Level)

當接收端發現有未合法的 FIX tag 時,就要發送 Session 拒絕訊息,且包含錯誤訊息說明、Tag欄位、序號

填補模式(Gap Fill) 與 重設模式(Reset)

填補模式是請求重送指定範圍的資料

重設模式是在災難發生,無法復原情況下,需使用重設模式來更新序號

登出

登出時,由一方發起登出訊息給接收方

接收方必須回覆登出訊息,以利於發起方確認連線正常且結束連線

若超過5秒 Timeout 時間沒有接收到接收方的 Logout 資訊,連線就會主動中斷

其他詳細說明,可直接參考 FIX4.4電文規範作業手冊 - 台灣證券交易所


如果你喜歡我們的文章內容,請在這裡按個讚



16 進位簡介

16 進位簡介

電腦世界處理的基礎是 0 跟 1,我們稱之為二進位(binary)

二進位可以在組成十進位 0~9

不同的系統或程式對於十六進位都有不同的描述方式,但是基本概念如下:

十六進位則是由 0~9 A~F 組成

十六進位剛好是 4^2 ,轉二進位相當容易

例如:
二進位 01011110101101010010 可直接轉十六進位 5EB52

另外是 Byte 共 8 Bit

其中將 4 個 Bit 剛好可儲存一個16進位

各種場合帶入16進位方式

環境 格式 備註
URL %hex
XML,XHTML &#xhex
HTML,CSS #hex 6位,用於表示顏色
Unicode U+hex 6位,表示字符編碼
MIME =hex
Modula-2 #hex
Smalltalk,ALGOL 68 16rhex
Common Lisp #xhex或#16rhex
IPv6 8個hex用:分隔


如果你喜歡我們的文章內容,請在這裡按個讚



ASCII 編碼說明

ASCII 編碼說明

ASCII(American Standard Code for Information Interchange,美國標準資訊交換碼)是由美國國家標準局(ANSI)訂定的字元標準

並且已經被國際標準組織(ISO)公認為國際標準,現今多數語系編碼都會都會參考 ASCII 的格式

接下來介紹如何從2進位轉10進位來取得參照值

1 Byte = 8 Bit

每一個 Bit 都可以存取一個二進位 (即 0, 1)

可以試想,1Byte提供了8個空間
[][][][][][][][]

,每一個空間都可以塞一個2進位值,例如:
[0][0][0][0][0][0][0][0]

接下來,計算從2進位轉10進位方式:

例如 n 表示為 0或1

[2^7*n]+[2^6*n]+[2^5*n]+[2^4*n]+[2^3*n]+[2^2*n]+[2^1*n]+[2^0*n]

其 [0][0][0][0][0][0][0][1] 就可以計算程 [2^7*0]+[2^6*0]+[2^5*0]+[2^4*0]+[2^3*0]+[2^2*0]+[2^1*0]+[2^0*1] = 1
其 [0][0][0][0][0][0][1][0] 就可以計算程 [2^7*0]+[2^6*0]+[2^5*0]+[2^4*0]+[2^3*0]+[2^2*0]+[2^1*1]+[2^0*0] = 2
其 [0][0][0][0][0][0][1][1] 就可以計算程 [2^7*0]+[2^6*0]+[2^5*0]+[2^4*0]+[2^3*0]+[2^2*0]+[2^1*1]+[2^0*1] = 3

根據這些每一個10進位狀態,可以對應到一個字母

可直接參考下方 ASCII 編碼表


如果你喜歡我們的文章內容,請在這裡按個讚