乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      有了WCF,Socket是否已人老珠黃?

       fatcat916 2012-01-22

      有了WCF,Socket是否已人老珠黃?

      2010-12-25 16:58 by 田志良, 1802 visits, 收藏, 編輯

      1. Socket相關(guān)背景    

        Socket,中文譯為“套接字”,最早在UNIX中引入并得到廣泛應(yīng)用,后來(lái)微軟在設(shè)計(jì)Windows時(shí)引入了UNIX中的這個(gè)概念和相應(yīng)的設(shè)計(jì)理念,并針對(duì)Windows的特性略作調(diào)整,形成了Windows平臺(tái)上的Socket,簡(jiǎn)稱為“WinSock”,并為開發(fā)者提供了一整套的API,稱為“Windows WinSock Win32 API ”。

        WinSock經(jīng)歷了兩個(gè)版本,Windows Sockets 2是目前用得最多的版本(參看 http://en./wiki/Winsock )。     

      圖 1所示為.NET平臺(tái)下網(wǎng)絡(luò)應(yīng)用程序的層次架構(gòu):

            圖 1
        WinSock在底層使用一個(gè)運(yùn)行于操作系統(tǒng)核心的系統(tǒng)驅(qū)動(dòng)(Windows Sockets Knernel-mode Driver)tcpip.SYS,由它們負(fù)責(zé)管理網(wǎng)絡(luò)連接和緩沖管理。還有另一個(gè)驅(qū)動(dòng)Afd.sys(Ancillary Function Driver for WinSock)則用于支持基于 window socket的應(yīng)用程序,比如ftp、telnet等,被稱為“ Windows NT 套接字驅(qū)動(dòng)程序 ”。

        早期的Windows開發(fā)者,需要使用C/C++去調(diào)用WinSock,比如MFC就提供了一個(gè)“CSocket”類封裝底層的Socket。.NET也提供了一組類來(lái)封裝WinSock Win32 API,這些類集中于System.Net這一命名空間中,其中的核心類型就是Socket。Socket類是對(duì)WinSock API一個(gè)很淺的封裝,擁有不少方法直接對(duì)應(yīng)于WinSock中的C/C++函數(shù),比如Poll、Select、IOControl等。

        Socket有一個(gè)Handle屬性,它引用位于操作系統(tǒng)核心的Socket核心對(duì)象。Socket提供了眾多的屬性,還提供了SetSocketOption方法來(lái)設(shè)置各種選項(xiàng),對(duì).NET網(wǎng)絡(luò)應(yīng)用程序的數(shù)據(jù)通訊進(jìn)行“微調(diào)”。Socket的功能出奇地強(qiáng)大,在.NET平臺(tái)上,它支持以下四種典型的編程模式:

        (1)居于阻塞模式的Socket編程(單線程或多線程的),每個(gè)線程處理一個(gè)客戶端連接 

       ?。?)“非阻塞”模式的Socket編程,這是早期UNIX為提升網(wǎng)絡(luò)應(yīng)用程序性能而采用的編程模式,出于兼容和方便移植原有程序的目的而保留,建議新開發(fā)的.NET網(wǎng)絡(luò)程序不要再使用。

       ?。?)使用IAsyncResult的異步編程模式:Socket類提供有一堆的“BeginXXX/EndXXX”方法實(shí)現(xiàn)異步Socket編程,使用線程池中的線程完成工作,性能較好。

       ?。?)使用EAP的異步編程模式:Socket類提供了“另一堆”以“Async”結(jié)尾的方法,在底層使用Windows操作系統(tǒng)的Completion Port(完成端口)和Overlapped I/O mechanism(重疊輸入/輸出機(jī)制),可以提供“最高”的性能。


      2. 有了WCF,Socket是否已人老珠黃?     

        基于Socket開發(fā)網(wǎng)絡(luò)應(yīng)用程序已經(jīng)有很多年的歷史了,現(xiàn)在的新技術(shù)層出不窮,在.NET平臺(tái)之上,WCF大有“一統(tǒng)江湖”的勢(shì)頭,Socket是否真的“人老珠黃”?    

        請(qǐng)看圖 2所示的多層“松花蛋”:

        
                              圖 2
        圖 2說(shuō)明,WCF與WinSocket等底層技術(shù)之間實(shí)際上是一種“包含”關(guān)系,每一層都在下一層所提供服務(wù)的基礎(chǔ)上,又?jǐn)U充了新的功能,越外層的應(yīng)用程序,可以使用的功能往往越多,開發(fā)效率往往也會(huì)更高。WCF在WinSocket的基礎(chǔ)之上擴(kuò)充了大量的功能,使用它可以很高效地開發(fā)網(wǎng)絡(luò)應(yīng)用程序,尤其非常適合于開發(fā)基于SOA的分布式軟件系統(tǒng),但這并不是說(shuō)它可以完全把Socket打入冷宮。在不少場(chǎng)合,拋棄WCF那龐大的框架,直接使用Socket更合適:    

       ?。?)需要實(shí)現(xiàn)自己的通訊協(xié)議的場(chǎng)合(比如你要架設(shè)一個(gè)網(wǎng)絡(luò)游戲服務(wù)器)。    

       ?。?)你開發(fā)的系統(tǒng)需要實(shí)現(xiàn)“一問(wèn)一答”的“交互式”運(yùn)行模式。    

       ?。?)你希望能全面控制你的網(wǎng)絡(luò)應(yīng)用程序的“每個(gè)方面”,不想花時(shí)間去理解WCF那個(gè)復(fù)雜無(wú)比的內(nèi)部架構(gòu)。    

       ?。?)你的網(wǎng)絡(luò)應(yīng)用程序應(yīng)用背景非常單一與明確,比如就解決一個(gè)問(wèn)題:定期將分布于多臺(tái)計(jì)算機(jī)上的數(shù)據(jù)文件上傳“匯總”到一臺(tái)中心服務(wù)器上。    

       ?。?)……    

        如果需要基于各種標(biāo)準(zhǔn)協(xié)議(比如WS-*等)開發(fā)SOA的分布式軟件系統(tǒng),再使用Socket就不合適了,那會(huì)大大地增加開發(fā)的工作量和難度,WCF更適合于解決這個(gè)問(wèn)題。在實(shí)際開發(fā)中,我們還可以混用WCF和Socket。比如我們可以基于WCF開發(fā)P2P的應(yīng)用程序,使用NetPeerTcpBinding在P2P節(jié)點(diǎn)間“廣播消息”,然后,在兩個(gè)P2P節(jié)點(diǎn)之間直接使用Socket“私下”里傳送一個(gè)“秘密”文件。

      分類: Socket
      標(biāo)簽: socket, WCF
      3
      1
      (請(qǐng)您對(duì)文章做出評(píng)價(jià))
      博主前一篇:Http和Socket連接區(qū)別
      博主后一篇:Lambda 表達(dá)式 和 Predicate 泛型委托
      Add your comment

      7 條回復(fù)

      1. #1樓 韋恩卑鄙 v-zhewg @waynebaby      2011-01-06 14:55
        (1)需要實(shí)現(xiàn)自己的通訊協(xié)議的場(chǎng)合(比如你要架設(shè)一個(gè)網(wǎng)絡(luò)游戲服務(wù)器)。
        WCF序列化器你可以自己實(shí)現(xiàn)一個(gè)。
         ?。?)你開發(fā)的系統(tǒng)需要實(shí)現(xiàn)“一問(wèn)一答”的“交互式”運(yùn)行模式。
        全雙工WCF也不難
         ?。?)你希望能全面控制你的網(wǎng)絡(luò)應(yīng)用程序的“每個(gè)方面”,不想花時(shí)間去理解WCF那個(gè)復(fù)雜無(wú)比的內(nèi)部架構(gòu)。
        往往不想花時(shí)間去理解wcf內(nèi)部結(jié)構(gòu)的人也寫不出什么好的“每個(gè)方面”
          (4)你的網(wǎng)絡(luò)應(yīng)用程序應(yīng)用背景非常單一與明確,比如就解決一個(gè)問(wèn)題:定期將分布于多臺(tái)計(jì)算機(jī)上的數(shù)據(jù)文件上傳“匯總”到一臺(tái)中心服務(wù)器上。

        簡(jiǎn)單也有簡(jiǎn)單的做法,
        .net4的wcf server就可以用http put。
        客戶端嘛。??蛻舳水?dāng)然用webrequest
        System.Net.WebClient.UploadFile()就可以了。。。

        socket 能不用,盡量不用。



         回復(fù) 引用 查看   
      2. #2樓[樓主] 田志良      2011-01-06 15:03
        @韋恩卑鄙 v-zhewg @waynebaby
        從效率上將,Socket無(wú)疑是最好的。在很多方面,Socket仍然發(fā)揮了非常重要的作用,比如說(shuō),實(shí)現(xiàn)網(wǎng)絡(luò)視頻聊天,客戶端用PHP+Flex,你服務(wù)端用什么通信?WCF?那是不可能實(shí)現(xiàn)的,只能用Socket。
         回復(fù) 引用 查看   
      3. #3樓 韋恩卑鄙 v-zhewg @waynebaby      2011-01-06 15:28
        引用田志良:
        @韋恩卑鄙 v-zhewg @waynebaby
        從效率上將,Socket無(wú)疑是最好的。在很多方面,Socket仍然發(fā)揮了非常重要的作用,比如說(shuō),實(shí)現(xiàn)網(wǎng)絡(luò)視頻聊天,客戶端用PHP+Flex,你服務(wù)端用什么通信?WCF?那是不可能實(shí)現(xiàn)的,只能用Socket。



        你一定要用 flex是沒辦法的 ,因?yàn)閒lash是個(gè)土鱉啊
        sl就可以。
        wcf支持打開的流傳播。
        一個(gè)調(diào)用中的參數(shù)可以是一個(gè)IStream,這個(gè)stream eof之前這個(gè)鏈接一直alive,調(diào)用一直不結(jié)束。

        實(shí)現(xiàn)聊天神馬的是如何實(shí)現(xiàn)和管理IStream這一個(gè)問(wèn)題了
         回復(fù) 引用 查看   
      4. #4樓 韋恩卑鄙 v-zhewg @waynebaby      2011-01-06 15:35
        另外 如果你comet理解得好, 何妨用flash開兩個(gè) Put/Get http流呢?
        restful 的視頻聊天室用WCF實(shí)現(xiàn)
        并不是不可能,只有敢不敢想。
         回復(fù) 引用 查看   
      5. #5樓[樓主] 田志良      2011-01-07 10:49
        @韋恩卑鄙 v-zhewg @waynebaby
        呵呵,看得出來(lái)你對(duì)WCF有很深的理解啊,我最近也在看WCF,以后要向你多多請(qǐng)教啊。最近完成了一個(gè)網(wǎng)絡(luò)視頻聊天項(xiàng)目,那個(gè)項(xiàng)目就是用Socket來(lái)實(shí)現(xiàn)的,Socket效率很高,但開發(fā)周期比較長(zhǎng)。
         回復(fù) 引用 查看   
      6. #6樓 Artech      2011-01-11 22:50
        WCF和Socket其實(shí)沒有太多可比性,應(yīng)用目標(biāo)范圍不同,根本談不上WCF替換Socket的說(shuō)法。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多