摘要:基于的和的,比和之流好看實在太多了。而且同樣是異步實現的,應該性能不差的。支持多個客戶端同時連接的。這個是配套的文件特別提一下,使用非常方便,直接可以打開的項目。
現代的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的項目。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64164.html
摘要:基本上所有的網絡應用都會示范一個的寫法。除了這些操作的主體是而不是,操作的是,而不是。以為例其過程是這樣的這段代碼就是創建一個,并注冊一個,并把附著到上。關鍵之一顯然是利用了協程的和,把回調轉換成順序的邏輯執行。 基本上所有的網絡應用都會示范一個tcp的echo寫法。前面我們已經看到了如何使用協程和異步io來做tcp服務器的第一步,accept。下面是一個完整的echo server的...
摘要:在本文中我將會介紹應用性能優化的一般原則。性能優化的流程圖摘取自和合著的性能,描述了應用性能優化的處理流程。例如,對每臺服務器,你面臨著為單個分配堆內存和運行個并為每個分配堆內存的選擇。不過位能使用堆內存最大理論值只有。 原文鏈接:http://www.cubrid.org/blog/dev-platform/the-principles-of-java-application-per...
摘要:虛擬機性能監控與故障處理工具詳解概述本文參考的是周志明的深入理解虛擬機第四章,為了整理思路,簡單記錄一下,方便后期查閱。虛擬機堆轉儲快照分析工具功能用于分析生成的。 虛擬機性能監控與故障處理工具 詳解 4.1 概述 本文參考的是周志明的 《深入理解Java虛擬機》 第四章 ,為了整理思路,簡單記錄一下,方便后期查閱。 JDK本身提供了很多方便的JVM性能調優監控工具,除了集成式的Vis...
摘要:強引用中最常見的引用,引用計數算法的就是典型的強引用,只要強引用還存在,垃圾收集器永遠不會回收掉被引用的對象。 概述 早在半個世紀以前,第一個使用了內存動態分配和垃圾收集技術的語言Lisp就已經誕生了,從那時,人們就在思考關于gc需要完成的三件事請: 哪些內存需要回收 什么時候回收 如何回收 直到今天已經有越來越多的語言開始內置內存動態分配和垃圾收集技術。經過長時間的發展,這些技術...
閱讀 1452·2023-04-25 19:00
閱讀 4150·2021-11-17 17:00
閱讀 1764·2021-11-11 16:55
閱讀 1523·2021-10-14 09:43
閱讀 3121·2021-09-30 09:58
閱讀 856·2021-09-02 15:11
閱讀 2127·2019-08-30 12:56
閱讀 1405·2019-08-30 11:12