国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

微服務框架 Spark Framework

fasss / 2091人閱讀

摘要:我是廣告本人的直播課程在月份就要開始了,希望小伙伴們支持一下,現(xiàn)在報名有優(yōu)惠噢

源碼:http://git.oschina.net/sancha...

Spark Framework beetl fastjson 結(jié)合

項目結(jié)構(gòu)如下

pom.xml如下:


    4.0.0

    com.coderknock
    TestSpark
    1.0-SNAPSHOT
    
        1.2.17
        1.7.21
    
    
        
            com.ibeetl
            beetl
            2.4.0
        
        
            com.sparkjava
            spark-core
            2.5
        
        
            redis.clients
            jedis
            2.8.1
        
        
            com.alibaba
            fastjson
            1.2.12
        
        
            org.slf4j
            slf4j-log4j12
            ${slf4j_version}
        
        
            org.jodd
            jodd-http
            3.7.1
        
    

    

        
            
                
                    org.apache.maven.plugins
                    maven-compiler-plugin
                    2.5.1
                    
                        1.8
                        1.8
                    
                
            
        

        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.8
                    1.8
                    UTF-8
                
            
            
                org.apache.maven.plugins
                maven-war-plugin
                2.1.1
                
                    test
                
            
            
                org.apache.maven.plugins
                maven-dependency-plugin
                
                    
                        install
                        install
                        
                            sources
                        
                    
                
            

        
    

WebSocket推送,普通Get請求以及返回Json的請求、使用Beetl進行視圖解析的方法:

/**
 * 拿客 www.coderknock.com
 * 微信公眾號 coderknock
 * 作者:三產(chǎn)
 */

import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;

import static spark.Spark.*;

public class Test {
    private static Logger logger = LoggerFactory.getLogger(Test.class);

    public static void main(String[] args) {
        //設置端口
        port(9090);
        //EchoWebSocket不能是內(nèi)部類
        webSocket("/echo", EchoWebSocket.class);
        //這個必須有,不然注冊不成功
        init();
        // matches "GET /hello/foo" and "GET /hello/bar"
        // request.params(":name") is "foo" or "bar"
        get("/hello/:name", (request, response) -> {
            //使用Beetl進行視圖的解析
            return Tmpl.render("hello.html", request.params());
        });
        // matches "GET /say/hello/to/world"
        // request.splat()[0] is "hello" and request.splat()[1] "world"
        get("/say/*/to/*", (request, response) -> {
            response.type("application/json");
            HashMap map = new HashMap();
            map.put("1", request.splat()[0]);
            map.put("2", request.splat()[1]);
            //打印結(jié)果
            logger.debug("$$$$$$$$$$$$$$$$$" + JSON.toJSON(map).toString());
            return JSON.toJSON(map);
        });
        get("/home", (request, response) -> {
            return Tmpl.render("index.html");
        });
        int i = 0;        
        //WebSocket主動推送的實現(xiàn),啟動輪詢,定時發(fā)送消息
        while (true) {
            try {
                Thread.currentThread().sleep(1000);
                i++;
                logger.debug("--->" + i);
                if (i % 5 == 1) {
                    EchoWebSocket.send(i);
                    logger.debug("--->第" + i + "次發(fā)送");
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

WebSocket實現(xiàn)類

import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;

/**
 * 拿客 www.coderknock.com
 * 微信公眾號 coderknock
 * 作者:三產(chǎn)
 */
@WebSocket
public class EchoWebSocket {
    private static Logger logger = LoggerFactory.getLogger(EchoWebSocket.class);
    // Store sessions if you want to, for example, broadcast a message to all users
    private static final Queue sessions = new ConcurrentLinkedQueue<>();

    @OnWebSocketConnect
    public void connected(Session session) {
        sessions.add(session);
        //建立連接的時候
        logger.debug("新增了Session" + session.toString());
    }

    @OnWebSocketClose
    public void closed(Session session, int statusCode, String reason) {
        sessions.remove(session);
        //關(guān)閉連接或者瀏覽器關(guān)閉時
        logger.debug("刪除了Session" + session.toString());
    }

    @OnWebSocketMessage
    public void message(Session session, String message) throws IOException {
        //獲取到客戶端發(fā)送的消息時,對消息進行輸出,病簡單處理返回另一個消息
        System.out.println("Got: " + message);   // Print message
        session.getRemote().sendString(message + "1231"); // and send it back
    }

    public static void send(int i) {
        //這里只是簡單的給所有用戶推送,其實可以改造一下(將Session與用戶id之類的通過發(fā)送消息的方式一一對應,這樣可以為特定用戶進行消息的發(fā)送)
        sessions.forEach(session -> {
                    try {                        
                        session.getRemote().sendString("第" + i + "次主動推送");
                    } catch (Exception e) {
                        logger.error("主動推送失敗", e);
                    }
                }
        );
    }
}

Beetl的一個簡單封裝:

import org.beetl.core.Configuration;
import org.beetl.core.GroupTemplate;
import org.beetl.core.Template;
import org.beetl.core.resource.WebAppResourceLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.Map;

/**
 * 拿客 www.coderknock.com
 * 微信公眾號 coderknock
 * 作者:三產(chǎn)
 */
public class Tmpl {
    private static GroupTemplate gt;
    private static Logger logger = LoggerFactory.getLogger(Tmpl.class);

    static {
        try {
            Configuration cfg = Configuration.defaultConfiguration();
            WebAppResourceLoader resourceLoader = new WebAppResourceLoader();
            gt = new GroupTemplate(resourceLoader, cfg);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static String render(String tmplPath) {
        Template t = gt.getTemplate(tmplPath);
        return t.render();
    }

    public static String render(String tmplPath, Map param) {
        Template t = gt.getTemplate(tmplPath);
        Map convertMap = new HashMap<>();
        try {
            param.forEach((x, y) -> {
                if (x.startsWith(":")) {
                    convertMap.put(x.substring(1), y);
                }
            });
        } catch (Exception e) {
            logger.error("轉(zhuǎn)換失敗", e);
        }
        t.binding(convertMap);
        return t.render();
    }
}

Get請求高并發(fā)測試:

/**
 * 拿客 www.coderknock.com
 * 微信公眾號 coderknock
 * 作者:三產(chǎn)
 */

import jodd.http.HttpRequest;
import jodd.http.HttpResponse;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

public class TestGet {
    //大家可以適當加大,但是如果太大可能會導致get請求發(fā)送失敗,大家有優(yōu)化建議可以告訴我(客戶端問題,并不是Spark處理不了高并發(fā))
    private static int thread_num = 500;
    private static int client_num = 500;

    public static void main(String[] args) {
        long time = System.currentTimeMillis();
        ExecutorService exec = Executors.newCachedThreadPool();
        final Semaphore semp = new Semaphore(thread_num);
        for (int index = 0; index < client_num; index++) {
            final int NO = index;
            Runnable run = new Runnable() {
                public void run() {
                    try {
                        semp.acquire();
                        System.out.println("------------------|" + NO + "|------------------");
                        HttpResponse response = HttpRequest
                                .get("http://localhost:9090/say/Hello-" + NO + "/to/World" + NO
                                )
                                .acceptEncoding("gzip")
                                .send();

                        System.out.println(response.unzip());
                        System.out.println("------------------&" + NO + "&------------------");
                        //業(yè)務邏輯
                        semp.release();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };
            exec.execute(run);
        }
        exec.shutdown();
    }
}


WebSocket可以通過websocket.html測試(建議使用IE8以上瀏覽器):
![WebSocket測試](http://img.coderknock.com/201606/03214119104_02161833_kTuD.png "WebSocket測試")
先點擊“建立連接”,然后可以填寫一些內(nèi)容,點擊“發(fā)送數(shù)據(jù)”,連接建立后就開始了主動推送,我設置的是5秒鐘一次。
我是廣告

本人的直播課程在 7 月份就要開始了,希望小伙伴們支持一下,現(xiàn)在報名有優(yōu)惠噢

https://segmentfault.com/l/15...

https://segmentfault.com/l/15...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/67235.html

相關(guān)文章

  • Docker 與 Mesos 的前生今世 | 數(shù)人云CTO肖德時@KVM分享實錄

    摘要:今天小數(shù)給大家?guī)硪黄夹g(shù)正能量滿滿的分享來自社區(qū)線上群分享的實錄,分享嘉賓是數(shù)人云肖德時。第二級調(diào)度由被稱作的組件組成。它們是最小的部署單元,由統(tǒng)一創(chuàng)建調(diào)度管理。 今天小數(shù)給大家?guī)硪黄夹g(shù)正能量滿滿的分享——來自KVM社區(qū)線上群分享的實錄,分享嘉賓是數(shù)人云CTO肖德時。 嘉賓介紹: 肖德時,數(shù)人云CTO 十五年計算機行業(yè)從業(yè)經(jīng)驗,曾為紅帽 Engineering Service ...

    0x584a 評論0 收藏0
  • 【譯】關(guān)于機器學習的11個開源工具

    摘要:雖然廣受歡迎,但是仍受到來自另外一個基于的機器學習庫的競爭年出現(xiàn)的。還提供更傳統(tǒng)的機器學習功能的庫,包括神經(jīng)網(wǎng)絡和決策樹系統(tǒng)。和的機器學習庫。顧名思義,是用于神經(jīng)網(wǎng)絡機器學習的庫,便于將瀏覽器用作數(shù)據(jù)工作臺。 關(guān)于機器學習的11個開源工具 翻譯:瘋狂的技術(shù)宅英文標題:11 open source tools to make the most of machine learning英文連...

    岳光 評論0 收藏0
  • 關(guān)于 Mesos,你知道多少?

    摘要:是一個集群管理器,提供了有效的跨分布式應用或框架的資源隔離和共享,可以運行。更貼近于層,而在之上。所以有人稱其為,或者分布式操作系統(tǒng)。你在這里可以看到使用的列表和有什么關(guān)聯(lián)嗎是一個為分布式應用提供一致性服務的軟件,而是一個分布式應用。 showImg(https://segmentfault.com/img/bVrBZJ); 聽過不少人在討論 Mesos,然而并不是很明白 Mesos ...

    cartoon 評論0 收藏0
  • 關(guān)于 Mesos,你知道多少?

    摘要:是一個集群管理器,提供了有效的跨分布式應用或框架的資源隔離和共享,可以運行。更貼近于層,而在之上。所以有人稱其為,或者分布式操作系統(tǒng)。你在這里可以看到使用的列表和有什么關(guān)聯(lián)嗎是一個為分布式應用提供一致性服務的軟件,而是一個分布式應用。 showImg(https://segmentfault.com/img/bVrBZJ); 聽過不少人在討論 Mesos,然而并不是很明白 Mesos ...

    xietao3 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<