1. socket相關背景
socket,中文譯為「套接字」,最早在unix中引入並得到廣泛應用,後來微軟在設計windows時引入了unix中的這個概念和相應的設計理念,並針對windows的特性略作調整,形成了windows平台上的socket,簡稱為「winsock」,並為開發者提供了一整套的api,稱為「windows winsock win32 api 」。
winsock經歷了兩個版本,windows sockets 2是目前用得最多的版本(參看 )。
圖 1所示為.net平台下網路應用程式的層次架構:
圖 1winsock在底層使用乙個執行於作業系統核心的系統驅動(windows sockets knernel-mode driver)tcpip.sys,由它們負責管理網路連線和緩衝管理。還有另乙個驅動afd.sys(ancillary function driver for winsock)則用於支援基於 window socket的應用程式,比如ftp、telnet等,被稱為「 windows nt 套接字驅動程式 」。
早期的windows開發者,需要使用c/c++去呼叫winsock,比如mfc就提供了乙個「csocket」類封裝底層的socket。.net也提供了一組類來封裝winsock win32 api,這些類集中於system.net這一命名空間中,其中的核心型別就是socket。socket類是對winsock api乙個很淺的封裝,擁有不少方法直接對應於winsock中的c/c++函式,比如poll、select、iocontrol等。
(1)居於阻塞模式的socket程式設計(單執行緒或多執行緒的),每個執行緒處理乙個客戶端連線
(2)「非阻塞」模式的socket程式設計,這是早期unix為提公升網路應用程式效能而採用的程式設計模式,出於相容和方便移植原有程式的目的而保留,建議新開發的.net網路程式不要再使用。
(3)使用iasyncresult的非同步程式設計模式:socket類提供有一堆的「begin***/end***」方法實現非同步socket程式設計,使用執行緒池中的執行緒完成工作,效能較好。
2. 有了wcf,socket是否已人老珠黃?
基於socket開發網路應用程式已經有很多年的歷史了,現在的新技術層出不窮,在.net平台之上,wcf大有「一統江湖」的勢頭,socket是否真的「人老珠黃」?
請看圖 2所示的多層「松花蛋」:
圖 2圖 2說明,wcf與winsocket等底層技術之間實際上是一種「包含」關係,每一層都在下一層所提供服務的基礎上,又擴充了新的功能,越外層的應用程式,可以使用的功能往往越多,開發效率往往也會更高。wcf在winsocket的基礎之上擴充了大量的功能,使用它可以很高效地開發網路應用程式,尤其非常適合於開發基於soa的分布式軟體系統,但這並不是說它可以完全把socket打入冷宮。在不少場合,拋棄wcf那龐大的框架,直接使用socket更合適:
(1)需要實現自己的通訊協議的場合(比如你要架設乙個網路遊戲伺服器)。
(2)你開發的系統需要實現「一問一答」的「互動式」執行模式。
(3)你希望能全面控制你的網路應用程式的「每個方面」,不想花時間去理解wcf那個複雜無比的內部架構。
(4)你的網路應用程式應用背景非常單一與明確,比如就解決乙個問題:定期將分布於多台計算機上的資料檔案上傳「彙總」到一台中心伺服器上。
(5)……
如果需要基於各種標準協議(比如ws-*等)開發soa的分布式軟體系統,再使用socket就不合適了,那會大大地增加開發的工作量和難度,wcf更適合於解決這個問題。在實際開發中,我們還可以混用wcf和socket。比如我們可以基於wcf開發p2p的應用程式,使用netpeertcpbinding在p2p節點間「廣播訊息」,然後,在兩個p2p節點之間直接使用socket「私下」裡傳送乙個「秘密」檔案。
MS是否腦子有問題?還是我落伍了?
跟著ms跑還真累,從pc到mobile,mobile7搞了這麼久,好不容易才放出來個sdk在xp中還裝不了,說說ms腦子是否進水了?vs2010都可以安裝到xp,那為啥mobile7的sdk就不能安裝呢?不能理解,安裝以往的做法,ms相容型這塊做的還是可以的,從ms在mobile領域的份額來看不容樂...
有了它,AI甚至可以讓你知道對方是否真的愛你?
你到底愛不愛我?這或許是戀愛雙方出現頻率最高的問題,想要知道對方大腦在想什麼,並不是什麼天方夜譚,通過科學技術還真的有望實現。不過,讓如此大膽的想法變為現實,我們需要借助什麼技術呢?我想,目前最火的人工智慧技術應該首先出列。人工智慧風頭正勁 卻逃不過 博眼球 的帽子 人工智慧並不是什麼新鮮的概念,但...
磁引導機械人的位址識別技術難題終於有了突破。。。。
我們自己研製的磁引導機械人 自己的磁感應探頭 在一些專案中已經得到應用。我們的磁引導機械人轉彎或選擇路徑時採用非盲走形式,這不同於現在某些單位使用的盲走形式,優點則更精確,更可靠,不易受到外部因素的干擾,且速度快。容易多計數。如在非位址的時候遇到乙個脈衝電平極有可能當成位址。在遇到乙個位址時,由於磁...