Netty 客户端数据交互

Java Netty实现UDP客户端声呐数据交互详解 Netty是高性能的网络应用框架,特别适合用于开发可维护的协议服务器和客户端。作为一个异步事件驱动的网络应用框架,Netty提供了一套简单、易于使用、高效的API来处理网络编程中的各种复杂问题,从而让开发者可以更加专注于业务逻辑的实现。核心组件是Netty框架的基础,包含Channel、ChannelHandler、ChannelPipeline等,它们各司其职,共同构建起整个通信的流程。Channel负责管理网络连接,是数据传输的载体。 阅读详情

​

今天发点人文的东西,这三张图都拍摄于拉卜楞寺。

                                                                                           微信公众号

                                                    王皓的GitHub:https://github.com/TenaciousDWang  

     

        在学习了Netty一些列的组件之后,今天我们来实战一下,写一下客户端互相聊天的功能。

 

        首先我们来分析一下这个功能应该怎么实现,假设现在有三个客户端登陆,首先我们需要将这三个客户端ID与对应的连接存到一个容器里,这里我们使用线程安全的ConcurrentHashMap以Key-Value的形式来存储这对映射关系。

 

        接下来我们分析一下互聊如何实现,假设A端要与B端聊天,A端发送数据包应该具有接受信息用户B的ID与聊天信息内容,服务端收到数据包后,根据数据包内接受信息用户ID从刚才的容器中找到对应的连接,然后将聊天信息写入连接,客户端B接收消息并打印到控制台,流程结束。

 

        接下来我们先来实现第一个处理登陆信息的功能,首先我们先创建一个Session对象,用于存储用户信息。

 

 

        接下来我们来抽取出一个工具类,用来操作Session对象及绑定连接,接触连接等。

 

 

        我们定义一个userIdChannelMap容器用来存储Session对象及对应的连接,创建一个绑定方法bindSession用来向容器里存放映射关系,同时给该连接绑定一个叫session的Attributes标识,里面泛型限定是一个session。

 

 

        有绑定就有解除绑定功能,添加一个unBindSession方法当没有登录时用来移除容器里的映射关系,创建一个getSession方法用来从连接中获取用户信息,创建一个getChannel方法用来根据用户标识,获取连接用于发送消失时。

 

 

        接下来我们改造一下之前写的用于处理登陆请求的Handler。登陆时我们先随机给用户生成一个id,并返回给用户,当然真正生产时,还是需要从数据库等持久化设施中读取的,这里我们把更多的时间放在netty上,将用户信息存入Session并与当前连接绑定,用户断线后移除绑定。

 

        这样在用户登录时,我们就将用户信息与当前连接绑定,并存入内存当中,以备使用。

 

        接下来我们来实现向一个客户端发送消息的功能,首先我们来定义一个发送消息数据包,里面需要定义一个指向用户ID变量,和消息变量。

 

 

        接下来我们在服务端写一个Handler来处理这个消息请求。当服务端读取到消息时,从数据包提取用户ID去容器里查找,找到后给对应的连接写入当前客户端发送来的消息即可,如果容器中无法找到对应的连接,则说明对方不在线,消息发送失败。

 

 

        对方客户端相对简单,只需要将接受到的消息,打印到控制台即可。

 

 

        最后我们回到客户端稍微改造一下,写一个发送消息的功能。

 

        

        首先登陆,如果已经登陆,我们可以在控制台输入消息接收方的 userId,然后输入一个空格,再输入消息的具体内容,然后,我们就可以构建一个消息数据包,发送到服务端。

 

        这样我们就完成了客户端之间的互聊功能,还是挺简单的,Netty为我们提供了极大的便利。

 

掌握Netty:实现客户端与服务端的高效通信 Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。作为一个基于Java NIO的框架,Netty简化了网络编程,提高了可扩展性和性能,支持TCP/UDP/HTTP等多种协议,广泛应用于即时通讯、游戏服务器、金融行业等需要高并发和低延迟通信的场景。Netty的架构设计十分灵活,它将服务器和客户端统一抽象为Channel,而ChannelPipeline则作为处理数据流的逻辑容器,通过Handler链式处理各个事件。 阅读详情

相关推荐

NettySocket同步数据获取实现

NettySocket同步数据获取实现,并实现了心跳检测,客户端连接控制,客户端登陆等。 Demo代码

Netty入门案例,实现简单地服务端到客户端的数据发送和读取

使用Netty 实现简单地服务端到客户端的数据发送和读取

不会骑摩托的程序员不是好的摄影师 4078

基于netty的服务器客户端收发消息代码

刚学netty ,写了一个基于netty的服务器客户端收发消息代码,功能非常简单,服务器每3秒向服务器发消息,服务器再把消息反给你。简单收1分,希望大家谅解。

使用网状实现多客户端连接并且互相通信

https://www.jianshu.com/p/adc2de3691c7 使用网状实现多客户端连接并且互相通信的需求: 1.服务器启动,正多个客户端与服务器进行连接,一个客户端上线之后,服务器端控制台会打印XX上线了,其他的客户端控制台打印XX上线了。如果一个客户端下线了,服务器端的控制台上打印,XX下线了,其他的客户端控制台打印XX下线了。 2.多个客户端都上线之后,一个客户端(比如...

不积跬步无以至千里,不积小流无以成江河 818

java应用netty服务端和客户端

java应用netty服务端和客户端示例,客户端和服务端的model对象目录必须一致

netty框架,服务端、客户端代码示例

简单的netty框架示例,代码中有完整的注释,代码包含服务端跟客户端代码,RunServer服务端测试类,RunClient客户端测试类

Netty之客户端连接调用

前言本文主要梳理Netty客户端如何发起连接请求的以及最终通过SocketChannel与服务端建立连接,顺便分析了在此过程中涉及到的地址解析过程。一、获取地址解析器备注:在Netty...

gaoliang1719的专栏 2709

海康威视web控件开发+vue结合做网页开发

需求:vue的项目,需要在页面展示出海康的硬盘录像机连接的摄像头的实时监控画面以及回放功能. 准备:web开发包(包含插件以及demo,在海康官网即可下载32位64位的都有.那些需要积分下载的博主良心不疼么.) 点击这里下载:链接: https://pan.baidu.com/s/12FrbycWyWWyiRJH5Yd1tPA 提取码: gam5 开始开发: 1.安装demo目录下的WebComponentsKit.exe插件(根据自己的浏览器以及系统选择32位还是64位的插件) 2.打.

u013682258的博客 8484

【Java】Netty创建网络服务端客户端(TCP/UDP)

Netty创建网络服务端客户端示例

DevFrank的博客 6152

智能座舱-语音交互系统

从什么是智能座舱、智能座舱的发展驱动因素、智能座舱的构成要素三个方面梳理我对智能座舱的基础认识之后,为了加深“智能座舱产品入门”课程中语音交互部分知识的理解,我从什么是语音交互、语音交互的底层技术、智能座舱的语音交互等方面,对智能座舱语音交互系统相关的知识进行了梳理与总结。

GUOSA0928的博客 1440

UFS 3.1协议分析(第五章) -- UFS协议栈

ContentsUFS顶层架构应用层UFS命令集UFS 设备管理器UFS任务管理器传输层互连层 UFS顶层架构     UFS基于SCSI SAM架构模型定义了一个完整的协议栈,从上到下依次为应用层、传输层、数据链路层、物理层。UFS使用MIPI联盟的UniPro作为数据链路层和MIPI的M-PHY作为物理层,两者合起来称之为互连层(UFS InterConnect Layer) 应用层     应用层包括UFS命令集、设备管

Frank_sample的专栏 7367

IO编程(四)Netty编程入门(服务端和客户端双向通信)

通过上篇文章已经分别对netty服务端和客户端有了简单的认识. 详情见:IO编程(三)Netty编程入门(服务端,客户端流程) 下面我们要实现客户端写数据到服务端,服务端读取数据同时写数据返回客户端 回到之前的客户端NettyClient 在bootstrap.handler()中添加写数据的方法 //处理IO逻辑 bootstrap.handler(n...

踟蹰千年的博客 330

一条龙开发指南:MCP AI Agent 理论+项目实战开发你的MCP Server

MCP(Model Connection Protocol)是Anthropic于2024年推出的AI模型连接协议,旨在为AI模型提供开放、通用的标准化接口,类似于“USB-C”接口,使AI模型能够无缝连接各种数据源和工具。MCP通过标准化协议解决了AI系统集成中的碎片化问题,提升了开发效率和系统可靠性。开发者可以通过简单的配置,快速接入不同的MCP Server,实现AI模型的多样化应用。MCP支持多种协议,如Stdio、SSE等,并通过JSON-RPC格式进行数据传输。文章还以腾讯云代码助手为例,展示了

杨不易呀 3045

SpringBoot整合Netty项目实战

专栏的前几篇文章已经讲述了Netty的相关知识,并且已经使用Netty实现了一些简单的功能如聊天室、WebSocket。之后还了解了Google Protobuf,并且已经集成了Netty实现了一些简单的功能。。。 今天主要来讲一下SpringBoot集成Netty且使用Protobuf来实现服务端和客户端的交互。。。 下面我们来看一下具体的流程: 首先需要编写.proto文件: syntax =...

weixin_44240370的博客 2806

Silvaco TCAD | 从极化效应到高频开关:GaN HEMT仿真设计与性能验证

本文深入探讨了使用Silvaco TCAD进行GaN HEMT仿真设计与性能验证的关键技术。从极化效应到高频开关特性,详细解析了2DEG形成机制、器件结构设计优化及高频特性仿真技巧,帮助工程师提升GaN HEMT的性能与可靠性。通过实战案例展示了如何通过仿真优化击穿电压和导通电阻,实现开关品质因数的显著提升。

weixin_30872337的博客 484

FA 新增资产API Demo

DECLARE l_trans_rec fa_api_types.trans_rec_type; l_dist_trans_rec fa_api_types.trans_rec_type; l_asset_hdr_rec fa_api_types.asset_hdr_rec_type; l_asset_desc_rec fa_a

chosen1brain的专栏 2142

[经验] Java 使用 netty 框架, 向 Unity 客户端的 C# 实现通信 [1]

这是一个较为立体的思路吧 首先是技术选型: 前端 : HTML5 + jQuery ,简单暴力, 不解释 服务端 : Spring Boot + Netty + Redis/Cache 客户端 : Unity3D + C# 所要实现的效果为: 服务端启动后, 开启端口监听, 然后客户端启动, 连接上服务端, 再由前端将数据请求发送到服务端, 服务端再发送到客户端 为了...

weixin_30521649的博客 569

SAP NetWeaver Business Client (NWBC) 的深入解析

SAP NetWeaver Business Client(NWBC)作为 SAP 提供的一种用户界面,旨在为终端用户提供无缝集成传统 SAP GUI 事务和新开发的基于 Web Dynpro ABAP 的应用程序的体验。SAP NetWeaver Business Client(NWBC)是 SAP 推出的用户界面,旨在为终端用户提供单一入口,集成传统的 SAP GUI 事务和新开发的基于 Web Dynpro ABAP 的应用程序。在实际业务场景中,NWBC 的应用提升了用户的工作效率和体验。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1603

netty3.0的服务端及客户端的搭建

  不喜欢写描述什么的,基本上使用步骤,注意事项都在代码注释中标明了,而相关的内容网上有很多,比自己的理解更好,所以自己对某个知识点的理解则都写在了为知笔记中。 1、服务端的编写 package com.netty.helloserver; import java.net.InetSocketAddress; import java.util.concurrent.Executor...

iteye_292的博客 230

MATLAB离线附加功能包下载与安装教程

本文介绍如何下载与安装MATLAB离线附加功能包,便于大家更加高效的使用MATLAB。

加斯顿工程师的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

制造业BOM从零搭建:结构、字段、清洗与MRP排错

BOM(物料清单)是制造业信息化的核心主数据,本质是用结构层级、数量关系和版本有效性描述产品如何由物料构成。它像产品的配方表与结构图,把设计语言翻译成采购、计划、生产和成本语言,并通过低层码、虚拟件、替代料等机制支撑ERP与MRP运算。在制造业数字化、物料主数据治理和数据清洗场景中,BOM质量直接影响采购建议、库存周转与成本卷算。围绕从零搭建、字段口径、分层校验、变更追溯和常见故障排查,可建立可执行的BOM管理方法。

weixin_33924220的博客 708

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Netty入门P5

客户端发送数据至服务端 示例代码Client.java /** * @program: learnnetty * @description: 客户端发送数据 * @create: 2020-05-04 10:31 **/ public class Client { public static void main(String[] args) { NioEventLo...

qq_40462579的博客 366

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Netty--TCP收发数据实例

其他网址 Netty实现简单的Socket通讯_Touch-优快云博客_netty socket通信JAVA 网络编程(6) Netty TCP 示例_kkgbn的博客-优快云博客_java netty tcpNetty简单示例----客户端与服务器通信_wangshuang1631的博客-优快云博客_netty客户端和服务器端功能Netty 实现TCP群聊系统_mister_Wei的博客-优快云博客 ...

IT利刃出鞘的博客 1324

Netty+JBoss

JBoss Marshalling是一个java对象序列化包,对JDK默认的序列华框架进行了优化,但又保持跟java.io.Serizlizable接口的兼容,同时增加了一些可调的参数和附加的特性,这些参数和特性可通过工厂进行配置。 Netty-JBoss实例: 1 maven pom.xml导入 <dependency> <groupId>org.jboss.marshalling</groupId> <artifactId&gt...

CentOS 481

Netty4实战第二章:第一个Netty应用

本章内容 获取最新稳定版Netty设置编译和运行示例环境创建基于Netty的服务端和客户端拦截和处理错误编译和运行基于Netty的服务端和客户端   本章会介绍Netty的几个核心概念。其中之一就是怎么用Netty拦截和处理异常,这是遇到问题时很重要的解决手段。这一章还会介绍其他一些核心概念,例如客户端和服务端的启动器和Channel Handler代码分离。这些是为继续学习其他章

wangjinnan16的博客 1530
上一篇: Netty ChannelHandler Hot Plug 热插拔
下一篇: Netty 聊天群组创建与通知
JavaBoy王皓
博客等级 码龄11年 23粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值