比特幣挖礦機開發(二)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

 

LSP API:

 

我們現在利用GO語言來撰寫LSP協議。你必須用準確的API來促進自動化的測試,這樣子就能保證在不同的運行中的相容性問題。

LSP的API可以在lsp檔案夾中被找到,這部分也是代碼的開始。檔案定義了幾種輸出,包括借口,介面和常數,同時也提供了詳細的檔案描述,講述了內容和相容各種層面的API。可以週期性查詢。

 

LSP資訊:

不同的LSP資訊被定義成如下的常數整形:

type MsgType int

const (

MsgConnect MsgType =iota // Connection request fromclient.

MsgData // Datamessage from client or server.

MsgAck //Acknowledgment from client or server.

)

EachLSP message consists of four 

elds, and is declared as a Go struct:

type Message struct {

Type MsgType // Oneof the message types listed above.

ConnID int // Uniqueclient-server connection ID.

SeqNum int // Messagesequence number.

Payload []byte //Data message payload.

}

這個其實就是前面說的隊列序號,串連ID什麼的那幾種參數的實現方式,相信也比較容易熟悉。但是,如果要在網路上傳輸資訊,你必須首先把結構轉化為一個UDP包通過把資訊整理成一序列的位元組。

這個方法可以用Go語言的json包裡的marshal函數實現。

 

LSP 參數:

在用戶端和伺服器裡,API都提供了一種機制去指定時間上限K,時間點長度b,和滑動視窗的大小a在伺服器和用戶端建立的時候。這些參數會被密封在下面的結構體裡:

type Params struct {

EpochLimit int // Default value is 5.

EpochMillis int // Default value is 2000.

WindowSize int // Default value is 1.

}

 

LSP的用戶端API:

應用程式會調用函數去建立新的用戶端和初始化用戶端的各種活動。不過,在用戶端和伺服器的串連已經被著手卻返回一個非空的關於串連沒被建立的錯誤時,這個函數就失敗了。函數被定義如下:

func NewClient(hostport string, params *Params) (Client,error)

 

LSP的用戶端API被用戶端的介面定義模式如下:

ConnID() int

Read() ([]byte, error)

Write(payload []byte) error

Close() error

 

類似用戶端,伺服器的介面允許應用程式對用戶端進行讀寫操作。注意,然而也是因為伺服器會同時串連好幾個LSP用戶端,write和closeconn模式會要求用戶端提供自己的串連ID作為憑證,指示這段串連到底是應該被寫還是被關閉。

如果要瞭解更詳細的檔案描述和每個函數的模式和功能,可以參考server_api.go 和 server_impl.go 檔案。

 

初始代碼:

初始代碼可以在p1/src/github.com/cmu440/目錄下,具體功能和分布如下:

 

lsp檔案夾裡包含了API,測試,和需要完善的開始代碼:

client_api.go, server_api.go, message.go,和params.go 檔案包含了對LSP,API的定義。為了調試的正常,這些檔案是不能改動的。

client_impl.go 檔案包含了對使用者端設計的一些架構,你要自己填具體內容。

 server_impl.go 檔案包含了對伺服器設計的一些架構,你要自己填具體內容。

*_test.go 檔案包含了我們要在Autolab上啟動並執行測試代碼,並評估你最後的提交。

 

lspnet檔案夾裡包含了所有你需要的UDP操作。在後台,lspnet包提供了額外的可以增強系統穩固性的功能。

srunner (server-runner) 和 crunner (client-runner)檔案夾分別提供了可執行檔可以用於調試的程式。這些程式的使用方法被放置在project的readme.md裡面。

 

這裡還提供了上面所說的用意測試的之前就編譯過的在srunner 和 crunner 中的可執行檔。這兩個檔案都通過LSP執行個體被編譯過,所以你會發現在早起編程時非常有用,例如,你在還沒寫伺服器的情況下想測試一下你的用戶端。這些指令的使用方法同時在readme.md裡面。

 

對於提供的開始代碼,你可能需要添加一些實用的文檔。例如,你可能會突然奇想添加一個common.go然後用它去儲存那些可以在用戶端和伺服器都能用上的代碼。

 

 (未完待續)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.