1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        loServer基于Netty的Http應(yīng)用服務(wù)器

        聯(lián)合創(chuàng)作 · 2023-10-01 15:05

        loServer

        基于Netty的Http應(yīng)用服務(wù)器

        介紹

        在之前公司的時候有一些小任務(wù)是這樣的:寫一個小Http接口處理一些任務(wù)(這個任務(wù)常常只需要幾行代碼)。然后我就開始寫個簡單的Servlet,掛在Tomcat上。隨著時間的推移,Tomcat上的這種小web項(xiàng)目越來越多,最后要更新一個項(xiàng)目就要重新啟動Tomcat(沒有設(shè)置熱啟動),非常笨重。領(lǐng)導(dǎo)意思是不要寫啥都掛在Tomcat上,最好寫的這個功能可以獨(dú)立運(yùn)行提供服務(wù)。于是需求就來了,找個嵌入式的Servlet容器(記得當(dāng)時年紀(jì)小,擺脫不了Servlet容器了……),貌似滿足要求的就是Jetty了,也沒折騰,后來就不了了之了。

        現(xiàn)在想想面對一些壓力并不大的請求,可以自己實(shí)現(xiàn)一個Http應(yīng)用服務(wù)器來處理簡單的Get和Post請求(就是請求文本,響應(yīng)的也是文本或json),了解了下Http協(xié)議,發(fā)現(xiàn)解析起來寫的東西很多,而且自己寫性能也是大問題(性能這個問題為未來考慮),于是考慮用Netty,發(fā)現(xiàn)它有Http相關(guān)的實(shí)現(xiàn),便按照Example的指示,自己實(shí)現(xiàn)了一個應(yīng)用服務(wù)器。思想很簡單,在ServerHandler中攔截請求,把Netty的Request對象轉(zhuǎn)換成我自己實(shí)現(xiàn)的Request對象,經(jīng)過用戶的Action對象后,生成自己的Response,最后轉(zhuǎn)換為Netty的Response返回給用戶。

        這個項(xiàng)目中使用到的Netty版本是4.X,畢竟這個版本比較穩(wěn)定,而且最近也在不停更新,于是采用了。之后如果有時間,會在項(xiàng)目中添加更多功能,希望它最終成為一個完善的高性能的Http服務(wù)器。

        使用方法

        1. 新建一個類實(shí)現(xiàn)Action接口,例如我新建了一個ExampleAction

        2. 調(diào)用ServerSetting.addAction("/example", ExampleAction.class);增加請求路徑和Action的映射關(guān)系

        3. ServerSetting.setPort(8090);設(shè)置監(jiān)聽端口

        4. LoServer.start();啟動服務(wù)

        5. 在瀏覽器中訪問http://localhost:8090/example既可

        代碼

        package com.xiaoleilu.loServer.example;
        
        import com.xiaoleilu.loServer.LoServer;
        import com.xiaoleilu.loServer.Request;
        import com.xiaoleilu.loServer.Response;
        import com.xiaoleilu.loServer.ServerSetting;
        
        /**
         * loServer樣例程序<br>
         * Action對象用于處理業(yè)務(wù)流程,類似于Servlet對象<br>
         * 在啟動服務(wù)器前必須將path和此Action加入到ServerSetting的ActionMap中<br>
         * 使用ServerSetting.setPort方法設(shè)置監(jiān)聽端口,此處設(shè)置為8090(如果不設(shè)置則使用默認(rèn)的8090端口)
         * 然后調(diào)用LoServer.start()啟動服務(wù)<br>
         * 在瀏覽器中訪問http://localhost:8090/example?a=b既可在頁面上顯示response a: b
         * @author Looly
         *
         */
        public class ExampleAction implements Action{
        
            @Override
            public void doAction(Request request, Response response) {
                String a = request.getParam("a");
                response.setContent("response a: " + a);
            }
        
            public static void main(String[] args) {
                ServerSetting.addAction("/example", ExampleAction.class);
                ServerSetting.setPort(8090);
                LoServer.start();
            }
        }
        瀏覽 18
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲无码成人在线 | 亚洲不卡在线观看 | 小婷的性放荡日记高h下载 | 催眠娇妻借朋友高h繁交h | 情色五月丁香 | 看黄色片网址 | 亚洲日韩在线一级视频观看 | 护士扒下内裤让我爽一夜电影 | 人人妻人人澡人人爽久久av | 国产精品高潮呻呤欠久A片 |