展开

关键词

java nio

github链接 https://github.com/KimRasak/java-nio-chat-room/ 参考 简易的自动发消息机 nio室 系列教程 前提知识 理解Selector、Channel 、Buffer、SelectionKey 了解建立连接、通信、断开连接时的机制 通信机制设计 功能 客户端可发起对服务器的连接,登陆后服务器广播会通知其他室用户 客户端连接后,可发送消息给服务器,服务器广播消息至其他室用户 客户端断开连接,服务器可响应并通知其他室用户有人离开房间

51150

NIONIO版本鸿儒

# 需求 基于NIO实现 支持同时多个客户端接入 支持客户端发送文本消息到服务器 支持客户端自定义群名称 接收到客户端发送的消息之后,服务器需要将消息转发给目前在线的所有其他客户端 支持客户端退出群 服务器 /** * 基于NIO实现的室服务端 * * @author futao * @date 2020/7/8 */ @Slf4j public class NioChatServer private static final ExecutorService THREAD_POOL = Executors.newFixedThreadPool(10); /** * 启动室 的室在[{}]端口启动成功 {}", StringUtils.repeat("=", 30), Constants.SERVER_PORT, StringUtils.repeat("=", 30)) chatroom/nio # 系列文章 【BIO】基于BIO实现简单动态HTTP服务器 【BIO】通过指定消息大小实现的多人室-终极版本 BIO在室项目中的演化

14710
  • 广告
    关闭

    腾讯云+社区系列公开课上线啦!

    Vite学习指南,基于腾讯云Webify部署项目。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java知识点——NIO实现网络

    NIO实现网络室 1. NIO完成网络编程 1.1 Selector选择器老大 Selector 选择器,网络编程使用NIO的大哥!!! SocketChannel,选择对应的监听操作,并且可以带有Object attachment参数 public final void close(); 关闭SocketChannel 1.5 使用NIO 设置当前NIO采用的方式为非阻塞方式 socket.configureBlocking(false); // 3. socket.finishConnect()) { // 因为采用NIO非阻塞方式,在获取等待连接的状态下,可以去做当前程序的其他操作。 java.nio.channels.*; import java.util.Iterator; import java.util.Set; /** * 使用ServerSocketChannel NIO

    43520

    初识Netty

    Netty是最流行的NIO框架之一,其健壮性、功能、性能、可定制性和可扩展性都是很优秀的。Netty是Hadoop生态中RPC框架Avro以及Dubbo底层的通信框架。今儿就来一下其的简单使用。 比如对消息进行编解码,协议不同,编解码步骤也不一样,例如Http和WebSocket 二、用Netty实现简易窗口 在上一篇用JavaNIO写了一个例子,Java原生的NIO开发需要手动判断事件的类型才能做下一步处理 ,相比于原生Java NIO的开发,Netty的开发会简单很多,不需要开发者关注当前事件是什么类型的事件,只需在相应的方法里关注业务逻辑的处理等。 在这边主要用于对室信息发送的处理,看一下其编码: public class ServerHandler extends ChannelHandlerAdapter { //存放所有Channel ,当前室人数为:"+onLineUsers.size(); System.out.println(message); for (Channel user

    22930

    Java知识点——NIO完成一个TCP

    NIO完成一个TCP室 1.1 NIO TCP室客户端完成 package com.qfedu.b_niochat; import java.io.IOException; import java.net.InetSocketAddress ; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; /** * NIO 非阻塞状态的TCP室客户端核心代码 TCP室服务端完成 package com.qfedu.b_niochat; import java.io.IOException; import java.net.InetSocketAddress 非阻塞状态的TCP室服务端核心代码 * * @author Anonymous 2020/3/16 16:59 */ public class ChatServer { /** TCP室客户端线程代码实现 package com.qfedu.b_niochat; import java.io.IOException; import java.util.Scanner;

    24820

    Java NIO

    Java NIO 一. BIO BIO中最为核心的概念为流,面向BIO编程即为面向流的编程。 流分为输入流和输出流。对于一个流来说,要么是输入流,要么是输出流,不可能二者兼而有之。 NIO概述 NIO中核心概念: Selector:选择器 Channel:通道 Buffer:缓冲区 NIO是面向块(Block)或缓冲区(Buffer)编程。 三. 下面使用NIO编写了一个简单的程序,服务端将客户端发来的消息广播给所有客户端。 java.util.concurrent.ConcurrentHashMap; /** * @Auther: ZhangShenao * @Date: 2019/1/23 15:46 * @Description:程序服务端 java.util.concurrent.Executors; /** * @Auther: ZhangShenao * @Date: 2019/1/23 16:53 * @Description:程序客户端

    18010

    Java SE】Java NIO系列教程(一) Java NIO 概述

    Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 下面是JAVA NIO中的一些主要Channel的实现: FileChannel DatagramChannel SocketChannel ServerSocketChannel 正如你所看到的,这些通道涵盖了 以下是Java NIO里关键的Buffer实现: ByteBuffer CharBuffer DoubleBuffer FloatBuffer IntBuffer LongBuffer ShortBuffer Java NIO 还有个 Mappedyteuffer,用于表示内存映射文件, 我也不打算在概述中说明。 Selector Selector允许单线程处理多个 Channel。 例如,在一个服务器中。 这是在一个单线程中使用一个Selector处理3个Channel的图示: ?

    35570

    Java NIO-1.概述

    Java NIO由以下几个核心组件组成: Channels Buffers Selectors Java NIO拥有的类和组件比这些要多,但是channel,Buffer和Selector组成了这个API Channels read data into Buffers, and Buffers write data into Channels Channel和Buffer有好几种类型,下面是Java NIO 下面是Java NIO中Buffer的一些核心的实现: ByteBuffer CharBuffer DoubleBuffer FloatBuffer IntBuffer LongBuffer ShortBuffer Java NIO还有一个MappedByteBuffer,用于将内存映射文件关联起来。这里也省略不做介绍。 Selector Selector允许单个线程处理多个Channel。 例如室服务器。 以下是一个例子,单线程使用一个Selector处理三个Channel ?

    23120

    NIO实现多人

    一、项目介绍 上周发布了《java的IO模型》一文,讲到了NIO,打铁要趁热,这周来个实战,用NIO实现一个简易的多人室。室,肯定是需要一个服务端和一个客户端的。 String msg = scanner.nextLine(); client.sendMsgToServer(msg); } } } 这就是用NIO 非阻塞模式实现的室,你可以启动多个客户端,一个客户端发送消息,服务端和别的客户端都能收到。

    22810

    彤哥说netty系列之Java NIO实现群(自己跟自己上瘾了)

    简介 上一章我们一起学习了Java中的BIO/NIO/AIO的故事,本章将带着大家一起使用纯纯的NIO实现一个越越上瘾的“群系统”。 业务逻辑分析 首先,我们先来分析一下群的功能点: (1)加入群,并通知其他人; (2)发言,并通知其他人; (3)退出群,并通知其他人; 一个简单的群系统差不多这三个功能足够了,为了方便记录用户信息 writeBuffer); } catch (Exception e) { e.printStackTrace(); } }} 服务端代码 服务端代码直接使用上一章NIO 彤哥发现,自己跟自己也是会上瘾的,完全停不下来,不行了,我再去自一会儿^^ 总结 本文彤哥跟着大家一起实现了“群系统”,去掉注释也就100行左右的代码,是不是非常简单? 这就是NIO网络编程的魅力,我发现写网络编程也上瘾了^^ 问题 这两章我们都没有用NIO实现客户端,你知道怎么实现吗?

    24510

    Java NIO 系列(转)

    Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。 Java NIO: Non-blocking IO(非阻塞IO) Java NIO可以让你非阻塞的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。 Java NIO: Selectors(选择器) Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。 Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 例如,在一个服务器中。 这是在一个单线程中使用一个Selector处理3个Channel的图示: ?

    22010

    JavaNIO快速入门

    例如,在一个服务器中,要使用Selector,得向Selector注册Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新。 如果感觉解释的不是很完善,请见博文Linux 五种IO模型,该博主通过和女友等餐的过程对5种IO的过程做了很好的诠释,大赞。 参考资料 netty官网 Java NIO系列教程 攻破JAVA NIO技术壁垒 完成端口(Completion Port)详解 java nio框架netty 与tomcat的关系 Tomcat7 中NIO处理分析(一) NIO文档 高性能IO模型浅析 同步、异步、阻塞与非阻塞

    1.5K90

    NIO概述

    Java NIO(Non-blocking / New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。 NIO 是一种可以替代 Java IO API 的新API,提供了与标准 API 不同的工作方式。 BIO是一个连接一个线程。 NIO是一个请求一个线程。 AIO是一个有效请求一个线程。 Java NIO: 同步非阻塞 服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。 Java AIO(NIO.2) :异步非阻塞 服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处。 NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

    23530

    第一次听人用男女关系讲 N(Non-Blocking)I(进)O(出),涨姿势了

    NIO 引入了 Buffer 的概念,每次使用 Buffer 拷贝数据其实是一次从用户空间(JVM) 向系统空间(系统内存) 的一次拷贝, Java 里面提供了 DirectByteBuffer 堆外内存 是时候展示真正的技术了 说了这么多,用 NIO 实现一个把妹程序呗? ); socketChannel.register(selector, SelectionKey.OP_READ); System.out.println("有新人进入室 "); socketChannel.write(StandardCharsets.UTF_8.encode("进入室,现在可以了")); } public static 解锁网络编程之NIO的前世今生 NIO如何实现多路复用? 深入理解 Java IO 高并发专题之 IO 多路复用:Select、Poll、Epoll 推荐文章面试官问:前后端分离项目,有什么优缺点?

    23040

    NIO - 多人室Demo代码

    SelectionKey.OP_READ); // 回复客户端提示信息 socketChannel.write(Charset.forName("UTF-8").encode("<==== 欢迎进入

    23730

    接着说通信框架 - Netty

    主要特性  Netty有很多重要的特性,主要特性如下:  - 优雅的设计 - 统一的API接口,支持多种传输类型,例如OIO,NIO  - 简单而强大的线程模型  - 丰富的文档  - 卓越的性能 - 拥有比原生Java API 更高的性能与更低的延迟  - 基于池化和复用技术,使资源消耗更低  - 安全性  - 完整的SSL/TLS以及StartTLS支持 - 可用于受限环境,如Applet以及OSGI ,比较适合客户端数据较大的请求/处理场景,例如web服务器等,要想知道有哪些系统使用了Netty,可以参考:http://netty.io/wiki/adopters.html  -IO模型:BIO/NIO /Netty 3.1.1 BIO(Blocking IO):阻塞IO  今主要介绍一下 基于netty 高性能功能,一对一一对多, 项目结构 ?

    29950

    NIONIO实现HTTP服务器

    NIO 实现的HTTP服务器 该版本只处理了静态资源,如需要处理动态资源可参考【BIO】基于BIO实现简单动态HTTP服务器 本篇文章的代码注释比较少,详细的NIO的工作流程可参考【NIONIO版本的鸿儒室 /** * NIO实现HTTP服务器 * * @author futao * @date 2020/7/10 */ @Slf4j public class NioHttpServer { # 源代码 https://github.com/FutaoSmile/learn-IO/tree/master/practice/src/main/java/com/futao/practice/chatroom /nio/httpserver

    26310

    IO 与 NIO之网络通信

    JAVA NIO的核心在于:通道(Channel)和缓冲区(Buffer)。通道表示打开 IO 设备(例如:文件、套接字)的连接。 的非阻塞模式 ---- Java NIO 有阻塞模式和非阻塞模式,阻塞模式的 NIO除了使用 Buffer存储数据外和 IO基本没有区别,允许一条线程从 Channel 中读取数据,通过返回值来判断 Selectors*:Java NIO的 selectors 允许一条线程去监控多个 channels的输入,你可以向一个 selector上注册多个 channel,然后调用 selector 的select 如果你需要同时管理成千上万的连接,但是每个连接只发送少量数据,例如一个服务器,用 NIO实现会更好一些,相似的,如果你需要保持很多个到其他电脑的连接,例如P2P网络,用一个单独的线程来管理所有出口连接是比较合适的 如果你需要同时管理成千上万的连接,但是每个连接只发送少量数据,例如一个服务器,用 NIO实现会更好一些,相似的,如果你需要保持很多个到其他电脑的连接,例如P2P网络,用一个单独的线程来管理所有出口连接是比较合适的

    11830

    NIO你真正了解多少?

    IO操作最佳实践 使用有缓冲的IO类,不要单独读取字节或字符 使用NIONIO 2或者AIO,而非BIO 在finally中关闭流 使用内存映射文件获取更快的IO Java IO 分类 Java BIO Java AIO(NIO.2) : 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。 NIO(同步非阻塞)方式适用于连接数目多且连接比较短(轻操作)的架构,比如服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。 Java NIO和IO的主要区别 面向流与面向缓冲. Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。 阻塞与非阻塞IO Java IO的各种流是阻塞的。

    20010

    NIO你真正了解多少?

    IO操作最佳实践 使用有缓冲的IO类,不要单独读取字节或字符 使用NIONIO 2或者AIO,而非BIO 在finally中关闭流 使用内存映射文件获取更快的IO Java IO 分类 Java BIO Java AIO(NIO.2) :异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。 NIO(同步非阻塞)方式适用于连接数目多且连接比较短(轻操作)的架构,比如服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。 Java NIO和IO的主要区别 面向流与面向缓冲. Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。 阻塞与非阻塞IO Java IO的各种流是阻塞的。

    22620

    相关产品

    • 即时通信 IM

      即时通信 IM

      即时通信 IM(Instant Messaging)基于 QQ 底层 IM 能力开发,仅需植入 SDK 即可轻松集成聊天、会话、群组、资料管理能力,帮助您实现文字、图片、短语音、短视频等富媒体消息收发,全面满足通信需要。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券