<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    #

    !!!架構網站內容不錯

    http://colobu.com/categories/%E6%9E%B6%E6%9E%84/page/2/

    posted @ 2016-04-19 17:54 paulwong 閱讀(480) | 評論 (0)編輯 收藏

    SPRING MVC整合NETTY

    http://wenku.baidu.com/view/4573aba4ce2f0066f53322e8.html

    posted @ 2016-04-19 13:27 paulwong 閱讀(2159) | 評論 (0)編輯 收藏

    Tigase服務器安裝以及集群

         摘要: 安裝第一臺tigase服務器安裝tigase服務器所需環境。[root@tigase3~]# yum install java-1.7.0-openjdk.x86_64 java-1.7.0-openjdk-devel.x86_64下載tigase服務器軟件包。[root@tigase3tmp]#wget https://projects.tigase.org/attachments/d...  閱讀全文

    posted @ 2016-04-19 10:17 paulwong 閱讀(839) | 評論 (0)編輯 收藏

    在 Java 應用程序中使用 Elasticsearch

    http://www.ibm.com/developerworks/cn/java/j-use-elasticsearch-java-apps/index.html?ca=drs-

    posted @ 2016-04-18 23:39 paulwong 閱讀(546) | 評論 (0)編輯 收藏

    集中式日志系統 ELK 協議棧詳解


    http://www.ibm.com/developerworks/cn/opensource/os-cn-elk/index.html?ca=drs-

    posted @ 2016-04-18 23:33 paulwong 閱讀(561) | 評論 (0)編輯 收藏

    DUBBO簡介

    http://dubbo.io/User+Guide-zh.htm

    隨著互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分布式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。

    • 單一應用架構
      • 當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。
      • 此時,用于簡化增刪改查工作量的 數據訪問框架(ORM) 是關鍵。
    • 垂直應用架構
      • 當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。
      • 此時,用于加速前端頁面開發的 Web框架(MVC) 是關鍵。
    • 分布式服務架構
      • 當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。
      • 此時,用于提高業務復用及整合的 分布式服務框架(RPC) 是關鍵。
    • 流動計算架構
      • 當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個調度中心基于訪問壓力實時管理集群容量,提高集群利用率。
      • 此時,用于提高機器利用率的 資源調度和治理中心(SOA) 是關鍵。

    posted @ 2016-04-15 11:28 paulwong 閱讀(516) | 評論 (0)編輯 收藏

    Netty是什么?

    本質:JBoss做的一個Jar包

     

    目的:快速開發高性能、高可靠性的網絡服務器和客戶端程序

     

    優點:提供異步的、事件驅動的網絡應用程序框架和工具

     

    通俗的說:一個好使的處理Socket的東東

     

     

    如果沒有Netty?

     

    遠古:java.net + java.io

     

    近代:java.nio

     

    其他:Mina,Grizzly

     

    為什么不是Mina?

     

    1、都是Trustin Lee的作品,Netty更晚;

    2、Mina將內核和一些特性的聯系過于緊密,使得用戶在不需要這些特性的時候無法脫離,相比下性能會有所下降,Netty解決了這個設計問題;

    3、Netty的文檔更清晰,很多Mina的特性在Netty里都有;

    4、Netty更新周期更短,新版本的發布比較快;

    5、它們的架構差別不大,Mina靠apache生存,而Netty靠jboss,和jboss的結合度非常高,Netty有對google protocal buf的支持,有更完整的ioc容器支持(spring,guice,jbossmc和osgi);

    6、Netty比Mina使用起來更簡單,Netty里你可以自定義的處理upstream events 或/和 downstream events,可以使用decoder和encoder來解碼和編碼發送內容;

    7、Netty和Mina在處理UDP時有一些不同,Netty將UDP無連接的特性暴露出來;而Mina對UDP進行了高級層次的抽象,可以把UDP當成"面向連接"的協議,而要Netty做到這一點比較困難。

     

     

    Netty的特性

     

    設計

    統一的API,適用于不同的協議(阻塞和非阻塞)

    基于靈活、可擴展的事件驅動模型

    高度可定制的線程模型

    可靠的無連接數據Socket支持(UDP)

     

    性能

    更好的吞吐量,低延遲

    更省資源

    盡量減少不必要的內存拷貝

     

    安全

    完整的SSL/TLS和STARTTLS的支持

    能在Applet與Android的限制環境運行良好

     

    健壯性

    不再因過快、過慢或超負載連接導致OutOfMemoryError

    不再有在高速網絡環境下NIO讀寫頻率不一致的問題

     

    易用

    完善的JavaDoc,用戶指南和樣例

    簡潔簡單

    僅信賴于JDK1.5

     

    看例子吧!

     

    Server端:

     

    Java代碼  收藏代碼
    1. package me.hello.netty;  
    2.   
    3. import org.jboss.netty.bootstrap.ServerBootstrap;  
    4. import org.jboss.netty.channel.*;  
    5. import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;  
    6. import org.jboss.netty.handler.codec.string.StringDecoder;  
    7. import org.jboss.netty.handler.codec.string.StringEncoder;  
    8.   
    9. import java.net.InetSocketAddress;  
    10. import java.util.concurrent.Executors;  
    11.   
    12. /** 
    13.  * God Bless You! 
    14.  * Author: Fangniude 
    15.  * Date: 2013-07-15 
    16.  */  
    17. public class NettyServer {  
    18.     public static void main(String[] args) {  
    19.         ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));  
    20.   
    21.         // Set up the default event pipeline.  
    22.         bootstrap.setPipelineFactory(new ChannelPipelineFactory() {  
    23.             @Override  
    24.             public ChannelPipeline getPipeline() throws Exception {  
    25.                 return Channels.pipeline(new StringDecoder(), new StringEncoder(), new ServerHandler());  
    26.             }  
    27.         });  
    28.   
    29.         // Bind and start to accept incoming connections.  
    30.         Channel bind = bootstrap.bind(new InetSocketAddress(8000));  
    31.         System.out.println("Server已經啟動,監聽端口: " + bind.getLocalAddress() + ", 等待客戶端注冊。。。");  
    32.     }  
    33.   
    34.     private static class ServerHandler extends SimpleChannelHandler {  
    35.         @Override  
    36.         public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {  
    37.             if (e.getMessage() instanceof String) {  
    38.                 String message = (String) e.getMessage();  
    39.                 System.out.println("Client發來:" + message);  
    40.   
    41.                 e.getChannel().write("Server已收到剛發送的:" + message);  
    42.   
    43.                 System.out.println("\n等待客戶端輸入。。。");  
    44.             }  
    45.   
    46.             super.messageReceived(ctx, e);  
    47.         }  
    48.   
    49.         @Override  
    50.         public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {  
    51.             super.exceptionCaught(ctx, e);  
    52.         }  
    53.   
    54.         @Override  
    55.         public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {  
    56.             System.out.println("有一個客戶端注冊上來了。。。");  
    57.             System.out.println("Client:" + e.getChannel().getRemoteAddress());  
    58.             System.out.println("Server:" + e.getChannel().getLocalAddress());  
    59.             System.out.println("\n等待客戶端輸入。。。");  
    60.             super.channelConnected(ctx, e);  
    61.         }  
    62.     }  
    63. }  

     

    客戶端:

     

    Java代碼  收藏代碼
    1. package me.hello.netty;  
    2.   
    3. import org.jboss.netty.bootstrap.ClientBootstrap;  
    4. import org.jboss.netty.channel.*;  
    5. import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;  
    6. import org.jboss.netty.handler.codec.string.StringDecoder;  
    7. import org.jboss.netty.handler.codec.string.StringEncoder;  
    8.   
    9. import java.io.BufferedReader;  
    10. import java.io.InputStreamReader;  
    11. import java.net.InetSocketAddress;  
    12. import java.util.concurrent.Executors;  
    13.   
    14. /** 
    15.  * God Bless You! 
    16.  * Author: Fangniude 
    17.  * Date: 2013-07-15 
    18.  */  
    19. public class NettyClient {  
    20.   
    21.     public static void main(String[] args) {  
    22.         // Configure the client.  
    23.         ClientBootstrap bootstrap = new ClientBootstrap(new NioClientSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));  
    24.   
    25.         // Set up the default event pipeline.  
    26.         bootstrap.setPipelineFactory(new ChannelPipelineFactory() {  
    27.             @Override  
    28.             public ChannelPipeline getPipeline() throws Exception {  
    29.                 return Channels.pipeline(new StringDecoder(), new StringEncoder(), new ClientHandler());  
    30.             }  
    31.         });  
    32.   
    33.         // Start the connection attempt.  
    34.         ChannelFuture future = bootstrap.connect(new InetSocketAddress("localhost", 8000));  
    35.   
    36.         // Wait until the connection is closed or the connection attempt fails.  
    37.         future.getChannel().getCloseFuture().awaitUninterruptibly();  
    38.   
    39.         // Shut down thread pools to exit.  
    40.         bootstrap.releaseExternalResources();  
    41.     }  
    42.   
    43.     private static class ClientHandler extends SimpleChannelHandler {  
    44.         private BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));  
    45.   
    46.         @Override  
    47.         public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {  
    48.             if (e.getMessage() instanceof String) {  
    49.                 String message = (String) e.getMessage();  
    50.                 System.out.println(message);  
    51.   
    52.                 e.getChannel().write(sin.readLine());  
    53.   
    54.                 System.out.println("\n等待客戶端輸入。。。");  
    55.             }  
    56.   
    57.             super.messageReceived(ctx, e);  
    58.         }  
    59.   
    60.         @Override  
    61.         public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {  
    62.             System.out.println("已經與Server建立連接。。。。");  
    63.             System.out.println("\n請輸入要發送的信息:");  
    64.             super.channelConnected(ctx, e);  
    65.   
    66.             e.getChannel().write(sin.readLine());  
    67.         }  
    68.     }  
    69. }  

     

    Netty整體架構



     

    Netty組件

     

    ChannelFactory

    Boss

    Worker

    Channel

    ChannelEvent

    Pipeline

    ChannelContext

    Handler

    Sink

     

    Server端核心類

    NioServerSocketChannelFactory

    NioServerBossPool 

    NioWorkerPool

    NioServerBoss

    NioWorker

    NioServerSocketChannel

    NioAcceptedSocketChannel

    DefaultChannelPipeline

    NioServerSocketPipelineSink

    Channels

     

     

    ChannelFactory

    Channel工廠,很重要的類

    保存啟動的相關參數

     

    NioServerSocketChannelFactory

    NioClientSocketChannelFactory

    NioDatagramChannelFactory

     

    這是Nio的,還有Oio和Local的

     

     

    SelectorPool

     

    Selector的線程池

     

    NioServerBossPool 默認線程數:1

    NioClientBossPool      1

    NioWorkerPool      2 * Processor

    NioDatagramWorkerPool

     

     

    Selector

     

    選擇器,很核心的組件

     

    NioServerBoss

    NioClientBoss

    NioWorker

    NioDatagramWorker

     

     

    Channel

     

    通道

     

    NioServerSocketChannel

    NioClientSocketChannel

    NioAcceptedSocketChannel

    NioDatagramChannel

     

    Sink

    負責和底層的交互

    如bind,Write,Close等

     

    NioServerSocketPipelineSink

    NioClientSocketPipelineSink

    NioDatagramPipelineSink

     

    Pipeline

    負責維護所有的Handler

     

    ChannelContext

    一個Channel一個,是Handler和Pipeline的中間件

     

    Handler

    對Channel事件的處理器

     

     

    ChannelPipeline

     



     

     

     

    優秀的設計----事件驅動



     

     

    優秀的設計----線程模型



     

    注意事項

     

    解碼時的Position

     

    Channel的關閉

     

    更多Handler

     

     

    Channel的關閉

     

    用完的Channel,可以直接關閉;

    1、ChannelFuture加Listener

    2、writeComplete

     

    一段時間沒用,也可以關閉

    TimeoutHandler

    posted @ 2016-04-12 15:19 paulwong 閱讀(886) | 評論 (0)編輯 收藏

    輕量級分布式 RPC 框架

         摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1、每套服務需搭配一個RPCSERVER2、RPCSERVER作為SPRING 容器的一個BEAN3、在SPRING啟動的時候,RPCSERVER會啟動一個NETTY服務器端,然后將SPRING...  閱讀全文

    posted @ 2016-04-12 13:44 paulwong 閱讀(951) | 評論 (0)編輯 收藏

    為什么開發與測試老掐架呢

    讓我們思考幾個常見的問題:

    • 軟件測試的目的是什么?

    • 開發人員能否構建出沒有Bug的完美軟件?

    • 測人人員和開發人員是什么關系?

    • 軟件測試能否保證軟件質量?

    先閉目冥想五分鐘吧,然后可以嘗試著回答上面的問題。

    計算機先驅 Maurice Wikes 回憶起 1949 年他在英國劍橋工作的情形,在拖著打孔紙帶上樓給雛形計算機 EDASC 裝載程序時,他看到了自己的未來:

    我強烈的意識到,生命中剩下的好日子,都將耗費在給自己的程序找錯誤上頭。

    Maurice Wikes告訴我們,沒有完美的軟件。

    我曾經寫過一篇薦書文,推薦了溫伯格技術思想三部曲中的《顛覆完美軟件:軟件測試必須知道的幾件事》。在這本書里,溫伯格也告訴我們,沒有完美的軟件。所有的開發和測試人員都應該讀讀那本書。

    溫伯格在《顛覆完美軟件》中幾乎討論所有常見的與軟件測試相關的概念、問題和指導思想,所以,在這篇文章里,我只能來吐槽啦,我將從以下幾方面列一些常見的現象,希望能引起大家的思考。

    • 測試和開發的關系

    • 流程與標準

    • 資源

    • 態度

    測試和開發的關系

    測試和開發是對立的嗎?

    從處理Bug的角度看,似乎可以這么說。開發人員既生產代碼,也生產Bug。因為開發人員不可避免地會生產Bug,所以測試人員必須存在,以便在軟件交付之前盡可能多地檢出Bug,保證交付給客戶的軟件質量更好一些。一個產Bug,一個挑Bug,看起來似乎是對立的。

    在現實中,很多測試團隊和開發團隊也正是因為這一點而搞得關系不和,甚至真的對立起來。請回想一下你周圍發生的與開發和測試相關的事兒,看看有沒有遇到過下面的情景:

    • 開發說,測試凈找麻煩,客戶跟本不可能像他們那樣使用軟件

    • 測試說,問題總是會在看似極端的條件下產生,用戶總是會不經意觸碰到看似極端的不可能出現的條件

    • 開發說,測試花在異常情況下的精力比測試主流程還多,不知道輕重緩急

    • 測試說,開發從來不考慮測試的感受,連測都不測就扔給我們

    • 開發說,我都測了,還要測試人員干什么

    • 測試說,這么明顯的問題你們都不測一下,把我們測試當垃圾桶啊

    • ……

    許許多多類似的問題,讓開發和測試的關系從撲朔迷離、相愛相殺走向對立。我見過開發和測試搞冷戰某人遇見某人側臉而過,也見過測試經理和開發經理打架,還見過高層領導故意讓測試團隊和開發團隊關系緊張以為這樣可以提高測試效率也能給開發壓力最終會產出更高質量的軟件……

    實際上,測試和開發擁有同一個目的:讓軟件更完美。測試和開發的關系,是一個問題的兩面,應該是相輔相成和平共處的。測試不是為了挑刺兒,他提出的問題也不針對生產軟件的開發人員,而僅僅是在努力想讓開發人員的產出物看起來更好用。只要開發不將測試提Bug這個行為看成針對個人的行為,一切就有了美好的前提。

    否定軟件,并不是否定開發軟件的人。這是開發和測試都需要明確的一個原則和前提。

    還有的人認為開發和測試之關系類似皮與毛,皮之不存毛將焉附?所以有的開發也會因此而有優越感:沒我們寫軟件,你們測試早下崗了!可是,開發不寫軟件,開發也下崗了耶!

    感謝開發的不完美,讓測試可以有事可做并練就慧眼。

    感謝測試的認真細致和耐心體貼,讓開發可以發現自己的不完美并有機會提升自己——那些說我軟件不好的,都是為了我好。

    資源

    別動我們測試的服務器,你們自己搭一個!

    我們沒環境,不用你們的用誰的?

    誰把我們的測試手機拿走了?你們申請一個嘛,老來占我們設備。

    誰在用我們的賬號?招呼都不打!我要用,趕緊退出來!

    有時開發和測試之間也會有資源上的沖突,要有努力的有創造性的解決(我可以負責任地說,裝黑蘋果不是好辦法),不要讓大家伙的工作卡在環境上,這是管理者要解決的基本問題。我見過很多非常棒的一線經理,在現實制約下,主動把自己的手機、iPad都貢獻出來當做測試設備。這也是解決資源問題的一種辦法哦。

    流程與標準

    你身邊的人員會這么抱怨嗎:

    • 開發根本不看我們的測試用例,評審郵件從來就不回復

    • 我們一報Bug,開發就說用戶根本不可能這么用,還說不知道我們怎么會這么測

    • 送測單里根本不寫測試范圍或者寥寥幾句跟沒寫一樣

    • 開發調整設計從來也不告訴我們

    • 為什么產品經理和UI只和開發討論需求變更?

    • 為什么發布計劃里不給測試預留測試時間?

    • 為什么開發寫完代碼測都不測就扔給我們?

    • 為什么客戶那里發現了問題老問是誰測的、為什么沒測出來?

    • 測試老是一聲不吭就把Bug優先級設置為Major

    • 測試總是把大量時間花在用戶根本不可能用到的功能上

    • 測試分不清哪些什么是重點,你給他說他還老是一堆道理這了那了

    • 測試提的Bug,現象描述也不準確,重現步驟也沒有,有的根本就知道是不是誤操作

    • 測試老來打斷我,一會兒叫一下一會兒叫一下,根本沒辦法專注開發

    • jira上的Bug重復率太高,一個問題提N遍,難道就不能合并一下?

    • 測試發現Bug,一聲招呼都不打就直接告訴老板了,搞得我很被動

    • 測試就是專門挑刺兒的,有勁不往正地兒使,你倒是測測用戶常用的功能啊

    • 那么簡單的Bug都能流出到用戶那里,真不知道測試怎么測的

    • 開發老嫌測試報告數據不漂亮,逼著我們調整

    Ok,如果你身邊的開發和測試從來沒有過類似的問題,那很好,恭喜你,看來你們的團隊人nice協作也很順暢,棒棒噠。

    假如你身邊充斥著這樣嘈雜的抱怨,那說明什么呢?開發、測試、發布這一套流程有問題?還是團隊缺乏明確的指向來引導大家向積極、有效的行為靠近?

    流程和標準總是有待解釋的,再好的規則,歪嘴和尚也能把它念斜……

    我們隨便挑一個問題吧:為什么開發寫完代碼測都不測就扔給我們?這個問題普遍存在,它反映出的是程序員和測試人員的工作邊界難以界定的矛盾。

    程序員會說,我都測一遍,還要你們測試做什么?

    測試會說,你測都不測,冒煙都過不了,有沒有責任心?

    程序員說,要我寫測試用例,搭各種環境,遍歷各種正常、異常邏輯,我還有沒有時間寫代碼了?

    測試會說,我們測試是垃圾桶嗎,什么爛玩意兒都直接扔給我們,我們的時間就那么不值錢?

    開發會說,測試本來就是干這個的,你不測誰測?

    ……

    像這樣的問題,能制定一個標準,說明什么樣的邏輯開發要自測覆蓋什么樣的邏輯可以交給測試來測?能畫一條三八線嗎?

    不能。所以,這個時候,靠譜的一線管理者就顯得很重要。如何創造性的發現適合團隊的方法來讓大家順暢地協同工作,比標準、制度更重要,這往往依賴于技術管理者的能力和團隊成員的意識。沒有普適的方法,只有適合這個組織的、此時此地的策略,加油吧,在戰斗中摸索出最適合當下的道路。

    那什么是靠譜的一線管理者呢?

    溫伯格《成為技術領導者》一書中對領導職責的定義如下:

    領導的職責就是創造這樣一個環境,每個人都能在其中發揮出更多的能力。

    如果一個技術領導帶領的團隊,大部分人都能專心做與其能力適配的事情而不用整天泡在與本節前面所列類似的問題里,那他基本上就算是比較靠譜了。

    至于像給測試預留多長的測試周期、調整設計要不要通知測試、需求調整要不要測試參與等問題,合理的流程和標準可以起到很大的輔助作用,技術領導者只要依據合理的制度,引導大家有效參與,就可以化解。

    態度

    場景一:

    測試MM對阿猿說發現了一個Bug。  阿猿矢口否認:不可能,絕對不可能!  MM:真的有Bug,你過來看一下!  阿猿:我都不用看,在我這兒好好兒的。  MM:你來看一下嘛……  阿猿:看什么看,肯定你環境問題,動什么東西了嗎?重啟了嗎?

    場景二:

    測試MM想在jira上提個Bug,先在QQ上對阿猿說:有個Bug,你過來看下?  阿猿:忙著呢,焦頭爛額的。  MM:一分鐘都用不了,你來看下吧。  阿猿:思路一打斷就不好恢復了,等會兒!  MM:你不看我提到jira上了啊。  阿猿:隨便,你不就是愛提Bug嘛。

    場景三:

    測試MM呼叫阿猿:阿猿阿猿,程序又崩潰了,快來看看!  阿猿慢騰騰地起身過來,鼠標點幾下:看不出來什么問題,你怎么操作的?  MM:這樣點一下,那樣,這樣,……回車……。  阿猿:重現不了啊,你想辦法重現,重現了再叫我,我忙著呢。  MM:……

    我曾經畫過一張暴漫,以“她發現了一個Bug”為題發布在微信訂閱號“程序視界”里,再現類似的場景,感興趣的可以在訂閱號內回復10019查看(點擊訂閱號底部的幫助菜單里的“所有文章”子菜單也能找到)。

    開發和測試的日常工作中,上面的情景不斷上演,這其中有一部分原因來自態度。我們有時還能聽到類似下面的話:

    • 你Bug里的現象描述根本沒用

    • 你根本就沒理解這個邏輯,給你說不清楚

    • 測試什么都不懂……

    • 你聽我的,我讓你怎么測你就怎么測

    • 你這種測法兒,再好的軟件都經不起你折騰

    • 用戶根本不可能這樣用,你們整來整去凈瞎耽誤工夫

    • 一輪都沒測完,你們就給老板說可以按期交付沒問題?

    • 你們安排計劃時根本不考慮測試,三天,三天怎么可能測得完!

    • ……

    有時,有一些開發人員會用技術優勢藐視測試,認為測試工作技術含量低,內心認為測試是附屬沒地位,說話就不太客氣……測試會感覺到,反過來也會對開發有意見……就這么,從相敬如賓開始走向嫌怨叢生……

    有個朋友的QQ簽名檔是:沒有自我,只有大道。我琢磨,放在軟件項目里,也挺適用的。

    其實,開發和測試擁有共同的目的:生產高質量軟件。具體說,每一個產品、項目、版本都有明確的目標,這些目標是屬于開發和測試的,是大家的。我們把共同的目標牢記在心,擺在首位,我們還要想著別人所做的一切,都是針對軟件本身,都是在為目標而努力,這樣就心平氣和多了,就容易從當下的泥沼中超脫出來,求同存異共同前進。

      作者:foruok 微信訂閱號“程序視界”(programmer_sight)

      原文:CSDN

      posted @ 2016-04-12 11:01 paulwong 閱讀(514) | 評論 (0)編輯 收藏

      Dubbos

           摘要: dubbos主要是基于dubbox的基礎上,進行進一步的優化及拓展。Dubbos當前的主要功能支持REST風格遠程調用(HTTP + JSON/XML):基于非常成熟的JBoss RestEasy框 架,在dubbo中實現了REST風格(HTTP + JSON/XML)的遠程調用,以顯著簡化企業內部的跨語言交互,同時顯著簡化企業對外的Open API、無線API甚至AJAX服務端等等的開...  閱讀全文

      posted @ 2016-04-12 10:59 paulwong 閱讀(709) | 評論 (0)編輯 收藏

      僅列出標題
      共115頁: First 上一頁 30 31 32 33 34 35 36 37 38 下一頁 Last 
      主站蜘蛛池模板: 日韩亚洲一区二区三区| 拍拍拍无挡免费视频网站| 亚洲永久永久永久永久永久精品| 永久中文字幕免费视频网站| 少妇太爽了在线观看免费视频| 黄页网址在线免费观看 | 国产无遮挡又黄又爽免费网站| 亚洲爆乳成av人在线视菜奈实| 亚洲黄色在线电影| 亚洲精品高清国产一久久| 亚洲人成国产精品无码| 国产区卡一卡二卡三乱码免费| 永久免费av无码不卡在线观看| 免费国产黄网站在线观看| 中文在线观看国语高清免费| 国产综合成人亚洲区| 国产午夜亚洲精品| 亚洲人成伊人成综合网久久| 亚洲黄色免费电影| 无码专区—VA亚洲V天堂| 国产亚洲av片在线观看16女人 | 久久精品国产亚洲AV| 中文字幕亚洲精品无码| 亚洲视频一区二区三区四区| 亚洲日本香蕉视频观看视频| 水蜜桃亚洲一二三四在线| 国精无码欧精品亚洲一区| 亚洲性猛交XXXX| 亚洲色精品vr一区二区三区| 中文字幕第13亚洲另类| 中文字幕一精品亚洲无线一区| 亚洲国产欧美一区二区三区| 亚洲人成在久久综合网站| 国产99在线|亚洲| 中文字幕乱码亚洲无线三区| 亚洲色偷偷综合亚洲av78| 亚洲欧美日韩综合久久久| 亚洲AV无码AV男人的天堂不卡 | 亚洲乱码中文字幕综合234| 亚洲精品国产高清嫩草影院| 亚洲美女在线国产|