请选择 进入手机版 | 继续访问电脑版

默认
打赏 发表评论 18
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
跟着源码学IM(八):万字长文,手把手教你用Netty打造IM聊天
微信扫一扫关注!

本文作者芋艿,原题“使用 Netty 实现 IM 聊天贼简单”(原文链接见文末)。即时通讯网收录时有修订和改动,感谢原作者。


0、系列文章



一、本文引言


上篇《跟着源码学IM(七):手把手教你用WebSocket打造Web端IM聊天》中,我们使用 WebSocket 实现了一个简单的 IM 功能,支持身份认证、私聊消息、群聊消息。

然后就有人发私信,希望使用纯 Netty 实现一个类似的功能,因此就有了本文。

cover-opti2.png

注:源码在本文“三、本文源码”一节的附件处可下载。

本文已同步发布于“即时通讯技术圈”公众号,欢迎关注。公众号上的链接是:点此进入

二、知识准备


可能有人不知道 Netty 是什么,这里简单介绍下:

Netty 是一个 Java 开源框架。Netty 提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
也就是说,Netty 是一个基于 NIO 的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。
Netty 相当简化和流线化了网络应用的编程开发过程,例如,TCP 和 UDP 的 Socket 服务开发。


以下是几篇有关Netty的入门文章,值得一读:


如果你连Java的NIO都不知道是什么,下面的文章建议优先读一下:


Netty源码和API的在线阅读地址:


三、本文源码


本文完整代码附件下载:
lab-67-netty-demo(52im.net).zip (58.27 KB , 下载次数: 210 , 售价: 1 金币)

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:从新手到专家:如何设计一套亿级消息量的分布式IM系统下一篇:IM扫码登录技术专题(三):通俗易懂,IM扫码登录功能详细原理一篇就够

本帖已收录至以下技术专辑

推荐方案
评论 18
非常好,很适合入门
引用:cairne 发表于 2021-04-21 11:05
非常好,很适合入门

这么长的内容,全部看完了?
签名: 《一套基于Netty的分布式高可用IM详细设计与实现(有源码)》http://www.52im.net/thread-4257-1-1.html
C:\Users\csj\AppData\Local\Temp\企业微信截图_16193430138073.png大佬这个模块源码好像没有加进去
引用:csj 发表于 2021-04-25 17:31
大佬这个模块源码好像没有加进去

看不到你的截图
签名: 《一套基于Netty的分布式高可用IM详细设计与实现(有源码)》http://www.52im.net/thread-4257-1-1.html
引用:JackJiang 发表于 2021-04-25 20:32
看不到你的截图

lab-67-netty-demo 这个父工程里面继承了 lab-67,好像没有 lab-67这个工程吧
引用:csj 发表于 2021-04-26 09:08
lab-67-netty-demo 这个父工程里面继承了 lab-67,好像没有 lab-67这个工程吧

没有别的依赖吧,你截个图我看看
签名: 《一套基于Netty的分布式高可用IM详细设计与实现(有源码)》http://www.52im.net/thread-4257-1-1.html
引用:JackJiang 发表于 2021-04-26 16:36
没有别的依赖吧,你截个图我看看

图片上传不上去,太慢了,父工程pom文件里<parent>
<artifactId>lab-67</artifactId>

<groupId>cn.iocoder.springboot.labs</groupId>

<version>1.0-SNAPSHOT</version>

</parent>
我的已经跑起来了,继续学习中


引用:csj 发表于 2021-04-28 13:44
图片上传不上去,太慢了,父工程pom文件里
lab-67

那这个问题怎么解决的能说下吗
引用:狼与梦想家 发表于 2021-05-26 16:56
那这个问题怎么解决的能说下吗

把 父工程pom文件 parent 依赖干掉,  <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <version>1.0-SNAPSHOT</version>
    <groupId>cn.iocoder.springboot.labs</groupId>
    <artifactId>lab-67-netty-demo</artifactId>
    <packaging>pom</packaging>
    <modules>
        <module>lab-67-netty-demo-server</module>
        <module>lab-67-netty-demo-client</module>
        <module>lab-67-netty-demo-common</module>
    </modules>
</project>
开始学习im,感谢楼主
签名: 开心学习IM
引用:csj 发表于 2021-05-28 16:47
把 父工程pom文件 parent 依赖干掉,  

    4.0.0

好的
这个 跟 跟着源码学IM(三)  有啥区别吗? 好像还没 三 功能多...
引用:kebukeYi 发表于 2021-07-29 11:42
这个 跟 跟着源码学IM(三)  有啥区别吗? 好像还没 三 功能多...

主要是入门学习用的,不可能就这么一篇文章就让你撸一个完整的im出来,那远远不够啊
签名: 《一套基于Netty的分布式高可用IM详细设计与实现(有源码)》http://www.52im.net/thread-4257-1-1.html
感谢分享
签名: 学习学习
非常详细
之前没用过netty,把这个改成Invocation改成proto文件后,继承的netty的编解码器顺序错了,结果导致一直报错。。。     InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag;;;;;;给跟我一样的小白一点参考把。               
.addLast(new ProtobufVarint32LengthFieldPrepender())
                .addLast(new ProtobufEncoder())
                // 解码器
                .addLast(new ProtobufVarint32FrameDecoder())
                .addLast(new ProtobufDecoder(InvocationProto.InvocationProtocol.getDefaultInstance()))
                // 消息分发器
签名: 我就是我,普普通通的我
引用:天问 发表于 2022-09-12 14:27
之前没用过netty,把这个改成Invocation改成proto文件后,继承的netty的编解码器顺序错了,结果导致一直报错 ...

嗯嗯 感谢。给你点赞!
签名: 《一套基于Netty的分布式高可用IM详细设计与实现(有源码)》http://www.52im.net/thread-4257-1-1.html
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部