賴勇浩(http://laiyonghao.com)
轉讓一套基於 Flash 的網頁版棋牌平台,它是我在 2009 年初開發完成的,當時是接了一個外包,所以才起意做這個項目的,後來項目流產了。最近看到不少網頁版棋牌的外包資訊,所以本著代碼放著也會爛掉,不如挖掘剩餘價值的宗旨,在這裡轉讓一下。
之所以在這裡轉讓,而不是選擇在外包網之類的,是因為這個項目讓我對買家有一些要求:買家有一定的開發能力,如果沒有技術人員,建議不要買。
這是因為這個棋牌系統的伺服器端是基於 Python 開發的,運行在 GNU/Linux 上,嗯,確切來說現在正在 Ubuntu Server 10.04 上跑著。這個項目使用 MySQL 5.1,在資料庫這一塊我自己實現了一個分庫代理進程,所以撐個 10 萬人線上是沒有問題的。超過 10 萬怎麼辦?理論上也沒有問題,如果事實上有了問題,也沒有太大關係,那時你肯定有錢把很多牛人招安了,他們會幫你搞定的。要知道,棋牌找 10 萬個人來玩,不是容易的事,起碼比找到人寫一個能支撐 100 萬人線上的棋牌平台要難得多,相信我。
Flash 和 Python 之間是通過 TCP Socket 進行串連通訊的,使用的協議是 AMF,伺服器端使用 PyAMF 0.6,這玩意很快,你懂的。伺服器端由若干條進程,組成一個“偽分布式”系統,嗯,用偽字是因為很多分布式系統的特性它都缺失了,這主要是出於成本收益比的考慮,棋牌所能賺到的錢,跟開發一個牛X的分布式系統所要付出的成本,是不值得你去這樣做的,我相信你也懂的。雖然是個“偽分布式”系統,但它的擴充性、靈活性和可靠性還是在一定程度上有保障的。它不能提供 7*24 小時不間斷服務,也沒有 99.999% 的可靠性,如果你更新系統,你需要重啟,但好在如果你不需要更新系統,那你幾乎不必去理會它。伺服器端對串連的用戶端(這裡的用戶端可能是伺服器端的另一條進程)有簡單的基於 IP 的安全性原則,簡單地說,就是會斷掉不在可信任 IP 列表裡裡 IP 過來的串連,這基本上夠用,別忘了成本收益比。
這個系統使用的是非同步回調的方式來開發商務邏輯,所以不可避免地業務代碼被分割在了幾個回呼函數裡,這一點希望買家懂得其中的利害。雖然使用了多線程,但都是很簡單的生產者/消費者模式來做的,中間以帶鎖的隊列進行解耦。編寫業務代碼不需要知道存在多線程這個事實,所有的業務代碼都當成是單線程來寫就可以了,加鎖神馬的,都是不需要的。
像所有的棋牌平台一樣,商務邏輯(比如鬥地主、象棋)都是以外掛程式的形式存在的,不過我這個稍有點不同的是這些商務邏輯是以進程的方式作為外掛程式的,而不是直接 import/loadlibrary 這種直接殺到進程空間裡的方式去做的,這也是系統的可靠性比較高的原因。比如鬥地主服務死掉,象棋還是可以照樣玩的。
最後說一下,目前這個棋牌平台除了已經完成大廳之外,還帶有 3 個小遊戲,分別是鬥地主、中國象棋和五子棋(無禁手),鬥地主的完成度已經蠻高了,後兩者要低一點。
再多說一句就是雖然說是挖掘剩餘價值,但這套系統肯定也不可能是像在論壇裡賣的那樣幾千塊錢的,如果你的預算就是這樣,就不需要聯絡了。嗯,該說一下我的連絡方式了,請發郵件到:mail@laiyonghao.com
http://qp-demo.laiyonghao.com/client/
在網上架了個棋牌的 demo
測試帳號可以隨意註冊。
以下是幾張: