分享開發soket經驗 我的基於socket的持久層)

來源:互聯網
上載者:User
文章目錄
  • 前言
  • 開發過程
  • 小結
  • 後續
前言

本項目Pixysoft.Framework.Noebe.Sockets,是把資料庫的操作用socket暴露出來,實現區域網路的調用。

不支援穿越防火牆、不支援區域網路-公網連結、不支援路由。

作品完成後,能夠通過這個架構,把眾多異構資料庫連結成一個龐大的資料庫池(雲??)

 

開發過程

第一階段 自以為是

剛開始,網上搜尋了幾個socket的區域網路聊天的例子,用同步的方法實現的。

連結在這裡:http://www.pudn.com/downloads40/sourcecode/p2p/detail138986.html

2天時間我就搞了個prototype,本機調用一點問題都沒有。還有點沾沾自喜,以為自己牛逼了,2天搞好了個socket 的伺服器。

結果一部署,問題來了。

伺服器正在傳輸資料,但是本地收了10%不到就斷了。用thread去等待簡直就是放屁,誰知道thread等到什麼時候。就算把資料位移量也傳遞過去,一樣斷。

 

第二階段 認真對待

一下子受了挫折,開始認真搜尋資料。在codeprojects和cnblogs找到了非同步socket的例子,特別是NCindy這個非常的好,有個很簡單的非同步模型例子http://www.cnblogs.com/ncindy/archive/2006/11/01/547143.html

 

於是新的解決方案:

1. 使用非同步做伺服器

2. 使用自訂的結束符號,例如 \0\r\n\0\r\n。讓socket讀到才判斷結束。這樣不用thread去瞎等了。

3. 這個結束符號有可能分割在2次的資料包中,因此判斷的時候要進行最近包合并判斷。

用非同步又花了2天時間搭建了系統,本機跑起來不用thread等待,更加爽了。以為ok了。再部署,又崩了。

傳輸到伺服器的大資料量(5mb左右吧)沒有問題,但是接受的時候,伺服器會顯示用戶端取消連結,而用戶端仍然在等待。

 

第三階段 自我發展

由於用戶端不知道連結斷了,於是我想到了用雙連結去保證,同時實現了一個續傳的機制。就是本地發送一個命令:

   RESUME;續傳的SOCKETID;位移量

通知本socket將代替剛才失敗的socket,續傳。然後用一個心跳連結去檢測、一個資料連結去傳輸。

部署,tnnd,又崩了。當2個連結同時斷開的時候,又進入等待。

 

第四階段 完成

繼續思考,既然有了續傳機制,何不自己做一個定時,如果超過這個時間,仍然接受不到資料,自己斷開,再續傳。

當然,我最討厭用thread了,直接用非同步去做定時。

1. 首先有個統計器,統計傳輸的頻率

2. 非同步等待的時間 = 頻率*10.

3. 如果非同步等待結束,發現剛才的資料仍然沒有接收到,自動斷開,然後啟動續傳。

總算完成了!

 

第五階段 完成

經過測試,在超級惡劣的環境下(bt/emule/網頁/馬鈴薯/還有不時斷網),能夠實現大資料量的穩定傳輸。

 

小結

1. socket服務端開發,盡量使用非同步,那個感覺超級爽!我看日誌,可以在1毫秒內處理多個連結(不是單單接收,而是包括了處理)。這樣1秒鐘的輸送量就非常大了。

2. 使用自訂的結束符表示傳輸完畢,例如\r\n這些。當然,不能用\0了。

3. 連結斷開,用戶端不一定知道,會進入假死狀態。因此用戶端的連結需要有檢視,建議用非同步檢測,不要用線程。

4. 最後,socket的傳輸超級不穩定,說斷就斷,還斷的沒有先兆。

 

後續

接下來,打算用comet技術去實現跨越防火牆的資料庫即時調用。叫做

Pixysoft.Framework.Noebe.Comets

大概思路:

1. 有個網站作為註冊中心

2. 伺服器啟動後連結網站,實現comet

3. 用戶端需要訪問伺服器資料庫,就聯入comet

如果有研究方向相同的,希望大家相互討論一下。

聯繫我們

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