资讯专栏INFORMATION COLUMN

【JAVA新生】echo server

laznrbfe / 743人阅读

摘要:基于的和的,比和之流好看实在太多了。而且同样是异步实现的,应该性能不差的。支持多个客户端同时连接的。这个是配套的文件特别提一下,使用非常方便,直接可以打开的项目。

现代的Java开发真的和我当年认识的很不一样了,这三篇文章非常值得一读:

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/

下面是一个java写的echo server。基于NIO2的callback和Quasar的fiber,比mina和netty之流好看实在太多了。而且同样是异步IO实现的,应该性能不差的。

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连上去之后,你输入什么它就返回什么。支持多个客户端同时连接的。这个是配套的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的项目。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64164.html

相关文章

  • JAVA新生echo server的第n种写法

    摘要:基本上所有的网络应用都会示范一个的写法。除了这些操作的主体是而不是,操作的是,而不是。以为例其过程是这样的这段代码就是创建一个,并注册一个,并把附着到上。关键之一显然是利用了协程的和,把回调转换成顺序的逻辑执行。 基本上所有的网络应用都会示范一个tcp的echo写法。前面我们已经看到了如何使用协程和异步io来做tcp服务器的第一步,accept。下面是一个完整的echo server的...

    Luosunce 评论0 收藏0
  • [译]GC专家系列5-Java应用性能优化的原则

    摘要:在本文中我将会介绍应用性能优化的一般原则。性能优化的流程图摘取自和合著的性能,描述了应用性能优化的处理流程。例如,对每台服务器,你面临着为单个分配堆内存和运行个并为每个分配堆内存的选择。不过位能使用堆内存最大理论值只有。 原文链接:http://www.cubrid.org/blog/dev-platform/the-principles-of-java-application-per...

    lufficc 评论0 收藏0
  • 《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具

    摘要:虚拟机性能监控与故障处理工具详解概述本文参考的是周志明的深入理解虚拟机第四章,为了整理思路,简单记录一下,方便后期查阅。虚拟机堆转储快照分析工具功能用于分析生成的。 虚拟机性能监控与故障处理工具 详解 4.1 概述 本文参考的是周志明的 《深入理解Java虚拟机》 第四章 ,为了整理思路,简单记录一下,方便后期查阅。 JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的Vis...

    gself 评论0 收藏0
  • jvm调优-命令篇

    摘要:打印等待回收对象的信息可以看到当前队列中并没有等待线程执行方法的对象。一般情况,会到客户端用工具来分析用于生成虚拟机当前时刻的线程快照。 运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生产环境出现问题的时候,一方面工具的使...

    Lsnsh 评论0 收藏0
  • jvm垃圾回收三部曲

    摘要:强引用中最常见的引用,引用计数算法的就是典型的强引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。 概述 早在半个世纪以前,第一个使用了内存动态分配和垃圾收集技术的语言Lisp就已经诞生了,从那时,人们就在思考关于gc需要完成的三件事请: 哪些内存需要回收 什么时候回收 如何回收 直到今天已经有越来越多的语言开始内置内存动态分配和垃圾收集技术。经过长时间的发展,这些技术...

    wanghui 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<