之前用tcp實現了乙個案例(遠端協助),後來我考慮用udp去實現它,於是又研究了下udp,我發現理論上udp可以做到,但是有一些問題不知道會不會有瓶頸
我參照網上寫了乙個簡單的示例如下
服務端接收、傳送資料
intrecv;
byte data = new
byte[1024
]; ipendpoint ipep = new ipendpoint(ipaddress.any, 8001
); socket newsock = new
socket(addressfamily.internetwork, sockettype.dgram, protocoltype.udp);
//繫結網路位址
newsock.bind(ipep);
console.writeline(
"this is a server, host name is
", dns.gethostname());
//等待客戶機連線
console.writeline("
waiting for a client");
//得到客戶機ip
ipendpoint sender = new ipendpoint(ipaddress.any, 0
); endpoint remote =(endpoint)(sender);
while (true
) :
", remote.tostring());
console.writeline(encoding.ascii.getstring(data,
0, recv));
}
客戶端傳送、接收資料
ipendpoint ipep = new ipendpoint(ipaddress.parse("127.0.0.1
"), 8001
);
//定義網路型別,資料連線型別和網路協議udp
socket server = new
socket(addressfamily.internetwork, sockettype.dgram, protocoltype.udp);
private
void button1_click(object
sender, eventargs e)
//thread th = new thread(receivedata);
}
public
void
receivedata()
);});}}
private
void form1_load(object
sender, eventargs e)
於是問題出現了,因為我發現服務端udp是乙個埠,乙個執行緒(不知道怎麼做多個埠對映,貌似也不可以),假如我做即時性要求很高資料量又大的應用,譬如遠端協助或者語音聊天等,所有客戶端都向服務端的乙個埠傳送資料,客戶端稍有數量的話,會不會有接收瓶頸?
於是我思考了下,假如我採用乙個固定的埠用於採集客戶端,採集到客戶端後再給客戶端分配乙個埠,開闢乙個執行緒用於監聽這個客戶端訊息,這樣的話我可以做到不同的客戶端與伺服器通訊採用了彼此獨立的埠,但是這樣做和tcp協議又是很類似了,我就要改造udp,那麼改造udp的成本要考慮進去,這是埠的問題,暫時不考慮埠,假設現在即時性要求降低了,只是文字聊天,服務端有一定的吞吐能力,仍然採用udp服務端做**實現客戶端與客戶端的通訊,那麼服務端、客戶端就要做心跳包,來檢測連線是否斷開,也要自己管理連線的狀態。
因此採用udp做即時應用 少不了的兩個問題
1.管理連線狀態
2.解決埠對映問題(隨著客戶端數量增加)
當然還有其他的問題 譬如丟包、順序等這裡沒有測試到
所以tcp、udp的使用場景要視情況而定,你是否有足夠能力去改造udp,讓它變得完美,否則就穩妥的使用tcp吧
Git使用場景 命令使用場景
通過個人使用git時候的遇到的使用場景,熟悉了解相關命令,也記錄一下場景的使用方法。所有場景均在ubuntu16.04 linux 作業系統下,其他作業系統有差異的地方自行查閱相關資料。安裝git sudo apt get install git設定及檢視git配置 user.name和user.e...
mongodb 使用場景和不使用場景
1.mongodb介紹 mongodb 名稱來自 humongous 是乙個可擴充套件的高效能,開源,模式自由,面向文件的資料庫。它使用c 編寫。mongodb特點 a.面向集合的儲存 適合儲存物件及json形式的資料。b.動態查詢 mongo支援豐富的查詢表達方式,查詢指令使用json形式的標記,...
mongodb 使用場景和不使用場景
mongodb 使用場景和不使用場景 2012 09 26 10 30 18 分類 linux 1.mongodb介紹 mongodb 名稱來自 humongous 是乙個可擴充套件的高效能,開源,模式自由,面向文件的資料庫。它使用c 編寫。mongodb特點 a.面向集合的儲存 適合儲存物件及js...