public class Dispacther implements Runnable{ private String host = "127.0.0.1"; private int port = 8080; public final Selector selector; public final ServerSocketChannel serverSocketChannel; public Dispacther() throws IOException { selector=Selector.open(); serverSocketChannel=ServerSocketChannel.open(); InetSocketAddress inetSocketAddress=new InetSocketAddress(this.host,this.port); serverSocketChannel.socket().bind(inetSocketAddress); serverSocketChannel.configureBlocking(false); SelectionKey selectionKey=serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); selectionKey.attach(new Acceptor(this)); } @Override public void run() { try { while(!Thread.interrupted()){ selector.select(); Set<SelectionKey> selectionKeys= selector.selectedKeys(); Iterator<SelectionKey> it=selectionKeys.iterator(); while(it.hasNext()){ SelectionKey selectionKey=it.next(); dispatch(selectionKey); selectionKeys.clear(); } } } catch (IOException e) { e.printStackTrace(); } } void dispatch(SelectionKey key) { Runnable r = (Runnable)(key.attachment()); if (r != null){ r.run(); } } }
public class Acceptor implements Runnable{ private Dispacther dispacther; public Acceptor(Dispacther dispacther) { this.dispacther = dispacther; } @Override public void run() { try { SocketChannel socketChannel=dispacther.serverSocketChannel.accept(); if(socketChannel!=null) new SocketHandler(dispacther.selector, socketChannel); } catch (IOException e) { e.printStackTrace(); } } }
public class SocketHandler implements Runnable { private SocketChannel socketChannel; private Charset charset = Charset.forName("UTF-8"); private Selector selector; public SocketHandler(Selector selector,SocketChannel socketChannel) throws IOException{ this.socketChannel=socketChannel; this.selector = selector; socketChannel.configureBlocking(false); SelectionKey selectionKey=socketChannel.register(selector, 0); selectionKey.attach(this); selectionKey.interestOps(SelectionKey.OP_READ); selector.wakeup(); } @Override public void run() { try { ByteBuffer buff = ByteBuffer.allocate(1024); String content = ""; while (socketChannel.read(buff) > 0) { socketChannel.read(buff); buff.flip(); content += charset.decode(buff); } if(!"".equals(content)){ System.out.println( " content : " + content); for (SelectionKey key : this.selector.keys()) { Channel targetChannel = key.channel(); if (targetChannel instanceof SocketChannel) { SocketChannel dest = (SocketChannel) targetChannel; dest.write(charset.encode(content)); dest.close(); } } } } catch (IOException e) { e.printStackTrace(); } } }
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(支持支付宝和微信 以及扣扣群),没钱捧个人场,谢谢各位。
个人主页:http://knight-black-bob.iteye.com/
谢谢您的赞助,我会做的更好!
相关推荐
赠送jar包:reactor-netty-core-1.0.15.jar; 赠送原API文档:reactor-netty-core-1.0.15-javadoc.jar; 赠送源代码:reactor-netty-core-1.0.15-sources.jar; 赠送Maven依赖信息文件:reactor-netty-core-1.0.15....
赠送jar包:reactor-netty-http-1.0.11.jar; 赠送原API文档:reactor-netty-http-1.0.11-javadoc.jar; 赠送源代码:reactor-netty-http-1.0.11-sources.jar; 赠送Maven依赖信息文件:reactor-netty-...
赠送jar包:reactor-netty-http-1.0.15.jar; 赠送原API文档:reactor-netty-http-1.0.15-javadoc.jar; 赠送源代码:reactor-netty-http-1.0.15-sources.jar; 赠送Maven依赖信息文件:reactor-netty-...
reactor-netty, TCP/HTTP/UDP 客户机/服务器,带有联网的反应器 反应器联网 http://projectreactor.io/docs/netty/release/api/在软件许可证 2.0许可,,,。
赠送jar包:reactor-netty-http-1.0.15.jar; 赠送原API文档:reactor-netty-http-1.0.15-javadoc.jar; 赠送源代码:reactor-netty-http-1.0.15-sources.jar; 赠送Maven依赖信息文件:reactor-netty-...
赠送jar包:reactor-netty-core-1.0.15.jar; 赠送原API文档:reactor-netty-core-1.0.15-javadoc.jar; 赠送源代码:reactor-netty-core-1.0.15-sources.jar; 赠送Maven依赖信息文件:reactor-netty-core-1.0.15....
总结,Reactor Netty是Java开发高性能网络应用的利器,它结合了Netty的底层性能优势和Reactor的反应式编程模型,为开发者提供了简单易用且高效的网络编程接口。了解并熟练掌握Reactor Netty,对于提升Java网络应用的...
赠送jar包:reactor-netty-core-1.0.11.jar; 赠送原API文档:reactor-netty-core-1.0.11-javadoc.jar; 赠送源代码:reactor-netty-core-1.0.11-sources.jar; 赠送Maven依赖信息文件:reactor-netty-core-1.0.11....
开发,底层采用Reactor3反应堆模型,支持单机部署,支持容器化部署,具备低延迟,高吞吐量,支持百万TCP连接,同时支持多种协议交互,是一款非常优秀的消息中间件! 1. 消息质量等级实现(支持qos0,qos1,qos2) 2. ...
在做了Reactor Netty需要Java 8或+才能运行。 使用来自或Maven Central存储库的Gradle (仅稳定版本): repositories { // maven { url '...
java运行依赖jar包
Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务...使用的Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架
Reactor Netty将Netty的灵活性和Spring Reactor的反应式编程模型结合在一起,为Java开发者提供了强大的工具。 在压缩包文件“reactor-netty-demo-master”中,我们可以预期找到一个Git仓库的克隆,通常包括项目的源...
在深入探讨Netty的Reactor线程模型源码之前,我们需要先理解Reactor模式的基本概念。 Reactor模式是一种设计模式,常用于处理并发I/O事件。在多路复用I/O(如epoll、kqueue)中,Reactor模式是关键组成部分,它负责...
Java编程方法论中,Spring Reactor、Reactor-Netty和Spring Webflux是现代Java开发中用于构建反应式应用程序的关键组件。Spring Reactor是响应式流(Reactive Streams)规范的实现,它提供了用于处理异步事件和数据...
java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现...
在 Netty 中,Reactor 模型是其处理 I/O 事件的关键设计,它允许服务端高效地处理大量并发连接。在本文中,我们将探讨 Reactor 在 Netty 中的具体实现,尤其是主从 Reactor 线程组的创建。 Netty 支持多种 I/O 模型...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨 Netty 的断线重连机制和心跳机制,这两个特性对于维持稳定可靠的网络通信至关重要...
赠送jar包:reactor-netty-http-1.0.11.jar; 赠送原API文档:reactor-netty-http-1.0.11-javadoc.jar; 赠送源代码:reactor-netty-http-1.0.11-sources.jar; 赠送Maven依赖信息文件:reactor-netty-...