成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【JAVA新生】echo server

laznrbfe / 754人閱讀

摘要:基于的和的,比和之流好看實(shí)在太多了。而且同樣是異步實(shí)現(xiàn)的,應(yīng)該性能不差的。支持多個(gè)客戶端同時(shí)連接的。這個(gè)是配套的文件特別提一下,使用非常方便,直接可以打開的項(xiàng)目。

現(xiàn)代的Java開發(fā)真的和我當(dāng)年認(rèn)識(shí)的很不一樣了,這三篇文章非常值得一讀:

http://blog.paralleluniverse.co/2014/05/01/modern-java/
http://blog.paralleluniverse.co/2014/05/08/modern-java-pt2/
http://blog.paralleluniverse.co/2014/05/15/modern-java-pt3/

下面是一個(gè)java寫的echo server?;贜IO2的callback和Quasar的fiber,比mina和netty之流好看實(shí)在太多了。而且同樣是異步IO實(shí)現(xiàn)的,應(yīng)該性能不差的。

package echo_server;

import co.paralleluniverse.fibers.*;
import co.paralleluniverse.fibers.io.*;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    static final Logger LOGGER = LoggerFactory.getLogger(Main.class);
    static final int PORT = 1234;

    public static void main(String[] args) throws Exception {
        new Fiber(() -> {
            try {
                FiberServerSocketChannel socket = FiberServerSocketChannel.open().bind(new InetSocketAddress(PORT));
                System.out.println("started");
                for (;;) {
                    FiberSocketChannel ch = socket.accept();
                    new Fiber(() -> {
                        try {
                            ByteBuffer buf = ByteBuffer.allocateDirect(1024);
                            while (true) {
                                buf.clear();
                                ch.read(buf);
                                buf.flip();
                                ch.write(buf);
                            }
                        } catch (IOException e) {
                            LOGGER.error("client fiber failed", e);
                        }
                    }).start();
                }
            } catch (IOException e) {
                LOGGER.error("main fiber failed", e);
            }
        }).start();
        Thread.sleep(Long.MAX_VALUE);
    }
}

用telnet 127.0.0.1 1234連上去之后,你輸入什么它就返回什么。支持多個(gè)客戶端同時(shí)連接的。這個(gè)是配套的build.gradle文件

apply plugin: "java"
apply plugin: "application"

sourceCompatibility = "1.8"

mainClassName = "echo_server.Main"

repositories {
    mavenCentral()
}

configurations {
    quasar
}

dependencies {
    compile "co.paralleluniverse:quasar-core:0.6.0:jdk8"
    quasar "co.paralleluniverse:quasar-core:0.6.0:jdk8"
    compile "org.slf4j:slf4j-api:1.7.7"
    runtime "org.slf4j:slf4j-jdk14:1.7.7"
    testCompile "junit:junit:4.11"
}

run {
    jvmArgs "-javaagent:${configurations.quasar.iterator().next()}"
}

特別提一下IntelliJ,使用非常方便,直接可以打開gradle的項(xiàng)目。

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64164.html

相關(guān)文章

  • JAVA新生echo server的第n種寫法

    摘要:基本上所有的網(wǎng)絡(luò)應(yīng)用都會(huì)示范一個(gè)的寫法。除了這些操作的主體是而不是,操作的是,而不是。以為例其過程是這樣的這段代碼就是創(chuàng)建一個(gè),并注冊一個(gè),并把附著到上。關(guān)鍵之一顯然是利用了協(xié)程的和,把回調(diào)轉(zhuǎn)換成順序的邏輯執(zhí)行。 基本上所有的網(wǎng)絡(luò)應(yīng)用都會(huì)示范一個(gè)tcp的echo寫法。前面我們已經(jīng)看到了如何使用協(xié)程和異步io來做tcp服務(wù)器的第一步,accept。下面是一個(gè)完整的echo server的...

    Luosunce 評(píng)論0 收藏0
  • [譯]GC專家系列5-Java應(yīng)用性能優(yōu)化的原則

    摘要:在本文中我將會(huì)介紹應(yīng)用性能優(yōu)化的一般原則。性能優(yōu)化的流程圖摘取自和合著的性能,描述了應(yīng)用性能優(yōu)化的處理流程。例如,對(duì)每臺(tái)服務(wù)器,你面臨著為單個(gè)分配堆內(nèi)存和運(yùn)行個(gè)并為每個(gè)分配堆內(nèi)存的選擇。不過位能使用堆內(nèi)存最大理論值只有。 原文鏈接:http://www.cubrid.org/blog/dev-platform/the-principles-of-java-application-per...

    lufficc 評(píng)論0 收藏0
  • 《深入理解Java虛擬機(jī)》(四)虛擬機(jī)性能監(jiān)控與故障處理工具

    摘要:虛擬機(jī)性能監(jiān)控與故障處理工具詳解概述本文參考的是周志明的深入理解虛擬機(jī)第四章,為了整理思路,簡單記錄一下,方便后期查閱。虛擬機(jī)堆轉(zhuǎn)儲(chǔ)快照分析工具功能用于分析生成的。 虛擬機(jī)性能監(jiān)控與故障處理工具 詳解 4.1 概述 本文參考的是周志明的 《深入理解Java虛擬機(jī)》 第四章 ,為了整理思路,簡單記錄一下,方便后期查閱。 JDK本身提供了很多方便的JVM性能調(diào)優(yōu)監(jiān)控工具,除了集成式的Vis...

    gself 評(píng)論0 收藏0
  • jvm調(diào)優(yōu)-命令篇

    摘要:打印等待回收對(duì)象的信息可以看到當(dāng)前隊(duì)列中并沒有等待線程執(zhí)行方法的對(duì)象。一般情況,會(huì)到客戶端用工具來分析用于生成虛擬機(jī)當(dāng)前時(shí)刻的線程快照。 運(yùn)用jvm自帶的命令可以方便的在生產(chǎn)監(jiān)控和打印堆棧的日志信息幫忙我們來定位問題!雖然jvm調(diào)優(yōu)成熟的工具已經(jīng)有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生產(chǎn)環(huán)境出現(xiàn)問題的時(shí)候,一方面工具的使...

    Lsnsh 評(píng)論0 收藏0
  • jvm垃圾回收三部曲

    摘要:強(qiáng)引用中最常見的引用,引用計(jì)數(shù)算法的就是典型的強(qiáng)引用,只要強(qiáng)引用還存在,垃圾收集器永遠(yuǎn)不會(huì)回收掉被引用的對(duì)象。 概述 早在半個(gè)世紀(jì)以前,第一個(gè)使用了內(nèi)存動(dòng)態(tài)分配和垃圾收集技術(shù)的語言Lisp就已經(jīng)誕生了,從那時(shí),人們就在思考關(guān)于gc需要完成的三件事請: 哪些內(nèi)存需要回收 什么時(shí)候回收 如何回收 直到今天已經(jīng)有越來越多的語言開始內(nèi)置內(nèi)存動(dòng)態(tài)分配和垃圾收集技術(shù)。經(jīng)過長時(shí)間的發(fā)展,這些技術(shù)...

    wanghui 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<