Go 語言的 Gearman API

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

學習 Go 已經有一段時間了,關於《學習Go語言》的翻譯進度一如既往的像之前一樣緩慢。每當翻譯到一處,看到 Go 語言那精妙的設計的時候,就會忍不住想寫點什麼。好吧,其實我之前的計劃是寫一個自己用的proxy,不過還是算了吧,原因大家都懂。輪子造太多,沒意思。

在整理一些之前的技術架構和思考新的架構的過程中,一次又一次提高了 Gearman 在系統中的重要性。雖然基於“新項目用老技術,老項目用新技術”的原則,並不打算在新的項目中使用 Golang。不過,總會有一天新項目要變成老項目吧?總會有一天,老項目需要做一些調整吧?理由牽強了點,但總是給自己找到了一個做的理由。

於是就有了這個:http://bitbucket.org/mikespook/gearman-go

最初構思的版本是對成熟的 libgearman 用 cgo 做一個 wrapper。失敗了……原因也很簡單,沒辦法將一個 golang 的 func 作為指標傳遞到 C 中去。
本想對 unsafe 的 Pointer 做一個 Hacking,看有沒有辦法得到一個 func 的指標,後來很2B的發現,需要通過在注釋裡寫 C 的方式來做 wrapper。難道提供一個需要在注釋裡寫代碼的 2B api 嗎?
糾結許久,於是用 golang 原生實現了一套 Gearman 的協議。感謝 Gearman,協議設計很簡單,文檔也還算清晰。更要感謝 Golang,代碼寫起來很開心,實現很給力。

– 安裝

cd ./src/pkg/gearman/make install

– 常式

# example/worker.gomake worker./workerexample/client.gomake client./client

在常式中,我專門提供了 python 的 libgearman 的 wrapper 版本的例子實現,就現在來看,python 版本聯合 golang 版本可以很好的工作。
現在這個包僅僅是可以啟動並執行階段,我即沒有對代碼做任何最佳化,也沒有對代碼進行任何覆蓋性測試。同時,效能和穩定性全部都是未知。
要在項目裡用的話,請確保你知道自己在幹什麼。
關於這個包的任何反饋都是歡迎的。在我的部落格這裡,或者 https://bitbucket.org/mikespook/gearman-go/issues。

哦,對了,在我真正在項目裡使用這個包之前,它的 API 都是不穩定的,隨時可能會發生改變。在可能的情況下,我或許會提供 gofix 支援,畢竟還沒玩過這個有趣的東西。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.