V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rqxiao
V2EX  ›  Java

作为 Java 开发有必要系统深入学习下 netty 吗

  •  
  •   rqxiao · 2022-09-09 09:47:52 +08:00 · 6004 次点击
    这是一个创建于 792 天前的主题,其中的信息可能已经有所发展或是发生改变。

    工作几年来没用过。但 rocketmq ,dubbo 等 都用了 netty 。netty 是 java 网络编程的王者。

    目前 nio 和 netty 入门都了解了。netty 是高级 java 迈不去的坎?

    30 条回复    2024-08-15 10:23:36 +08:00
    bootvue
        1
    bootvue  
       2022-09-09 09:50:49 +08:00
    frank1256
        2
    frank1256  
       2022-09-09 09:53:06 +08:00
    需要,但不用需要的这么彻底,比“了解”多一点就行,java 生态里,像我这样的低 level 码农没有机会造轮子。深入学习只是为了能看懂源码,以及面试装逼。
    RedBeanIce
        3
    RedBeanIce  
       2022-09-09 09:56:50 +08:00 via iPhone   ❤️ 1
    楼主的目标是提升自己嘛?

    经过一段时间思考,我认为很多时间学这些东西都没有用,我们更应该活在当下的去学习经常会用到的东西,然后去学习自己感兴趣的 or 未来可能会用到的

    例如我活在当下,可能 mybatis 是最需要研究的,还有 spring ,mysql ,es ,kafka 等等,,,当然每个人所处的岗位是不一样的,楼主和我不一样,请因地制宜。

    最后回复楼主的问题,需要了解 netty ,但是似乎楼主可能处于高段位?我也好像觉得我们公司高工不会 netty
    wxw752
        4
    wxw752  
       2022-09-09 10:02:59 +08:00
    公司的 ws 服务器就是我用 netty 写的,可以去学一下,真的没多难。
    leeyuzhe
        5
    leeyuzhe  
       2022-09-09 10:08:32 +08:00
    用法有必要学习,原理或者源码看个人需求
    assiadamo
        6
    assiadamo  
       2022-09-09 10:33:21 +08:00
    只用 java ,聚焦网络层和性能的需要重点了解,其他的就是学习他的编码风格、设计模式、数据结构啥的

    但更重要的是了解操作系统级的 socket 编程以及 TCP/IP 协议细节
    KevinBlandy
        7
    KevinBlandy  
       2022-09-09 11:15:55 +08:00   ❤️ 1
    我个人觉得 netty 是集并发编程,设计模式,socket 编程,响应式的各种优秀实践于一身的大成。可以好好读一读。
    DeepRedApple
        8
    DeepRedApple  
       2022-09-09 11:22:54 +08:00
    yazinnnn
        9
    yazinnnn  
       2022-09-09 11:30:11 +08:00
    netty

    vertx

    kotlin

    quarkus
    ⬇ ⬇ ⬇ ⬇ ⬇
    (接受各种 Monad) (拒绝各种 monad) 注重性能 注重云原生 缝合怪
    ⬇ ⬇ ⬇ ⬇ ⬇
    haskell clojure rust go .net/F#
    ⬇ ⬇
    范畴论 scheme/racket
    yazinnnn
        10
    yazinnnn  
       2022-09-09 11:32:58 +08:00   ❤️ 6
    netty

    vertx

    kotlin-

    quarkus
    ⬇------------------------⬇--------------------⬇---------------------⬇-------------------⬇
    (接受各种 Monad)------(拒绝各种 monad)-----------注重性能---------------注重云原生--------------缝合怪
    ⬇------------------------⬇--------------------⬇---------------------⬇-------------------⬇
    haskell--------------clojure----------------rust--------------------go----------------.net/F#
    ⬇-----------------------⬇
    范畴论---------------scheme/racket


    这缩进...
    securityCoding
        11
    securityCoding  
       2022-09-09 13:14:21 +08:00 via Android
    网络框架,学学也可以
    Jooooooooo
        12
    Jooooooooo  
       2022-09-09 13:26:00 +08:00
    重点要学的其实是 nio 那一套.
    awalkingman
        13
    awalkingman  
       2022-09-09 13:38:12 +08:00
    写 java 的程序员有两种,一种是用过 netty 的,一种是没用过 netty 的。
    xianyv
        14
    xianyv  
       2022-09-09 13:40:49 +08:00
    学了学 netty 的皮毛,只是会用,到现在也没研究源码. 混迹在中小公司中,几乎没有用武之地
    zoharSoul
        15
    zoharSoul  
       2022-09-09 14:01:12 +08:00
    没有必要
    keppelfei
        16
    keppelfei  
       2022-09-09 14:11:24 +08:00
    有段时间弄了一个即时通讯的项目,学习了不少,netty 真的很不错。
    iyaozhen
        17
    iyaozhen  
       2022-09-09 14:27:28 +08:00
    有必要,你要是高级 JAVA ,不懂这个说不过去
    ma836323493
        18
    ma836323493  
       2022-09-09 15:21:44 +08:00
    netty in action. 学学手动撸一个出来
    huang119412
        19
    huang119412  
       2022-09-09 15:30:07 +08:00
    netty 源码其实挺简单的,比 J.U.C 简单。可以研究一下
    zr8657
        20
    zr8657  
       2022-09-09 15:32:12 +08:00
    有,学 netty 的过程会复习计算机网络和 IOS 知识,我学完以后对网络有了新的认知
    carytseng
        21
    carytseng  
       2022-09-09 16:16:08 +08:00
    我熟悉 netty 是从对接一个 tcp 的设备开始的,在工作中学习是最深刻的。
    wxlwsy
        22
    wxlwsy  
       2022-09-09 20:21:15 +08:00
    如果你想研究 netty 底层可以先写点 nio 和 aio 原生代码的非常有用.
    brust
        23
    brust  
       2022-09-09 20:29:47 +08:00
    @yazinnnn 10

    能介绍下吗
    只用过 netty 和 vertx
    choice4
        24
    choice4  
       2022-09-09 22:04:00 +08:00 via iPhone
    @wxw752 有集群实现方案吗
    urnoob
        25
    urnoob  
       2022-09-09 23:17:26 +08:00 via Android   ❤️ 1
    我是一个用过并且看过源码的人,我是这么认为的
    netty 要看源码就看下从接受链接到 handler 这一条线就可以了。你只要理解数据是怎么过来的就行,不需要细节。这样有助于你使用它。
    这个过程中会涉及到 nio 操作,你可以忽略,转而看下 linux 用 epoll 三函数怎么用会清晰很多。也能学到底层一些东西。
    内存分配那块没必要看。
    wxw752
        26
    wxw752  
       2022-09-10 15:23:06 +08:00
    @choice4 集群实现也简单,业务逻辑上稍微改改就行,根据 channelId 判断长连接是不是连在当前服务实例中。

    如果在当前服务实例就正常处理,否则搞个发布订阅的中间件通知给其他实例,redis,zk,mq 都行。
    mmdsun
        27
    mmdsun  
       2022-09-11 00:18:39 +08:00
    不做研发、不造轮子用不上,看你在公司干的活是什么。

    当然可以面试提升 B 逼格
    xuanbg
        28
    xuanbg  
       2022-09-12 10:09:29 +08:00
    不想自己造个 nio 的轮子替代 netty ,或者基于 netty 进行二次开发,就没必要系统深入地学习 netty 。
    学习任何知识,都要问自己这几个问题,而不是人学亦学。
    1 、你学它有什么用没有?
    2 、投入的时间和精力能给你带来什么好处?
    diagnostics
        29
    diagnostics  
       86 天前
    @wxw752 #4 netty 本来就是简化网络编程的,怎么简化网络编程这个比较难,要学 IO 模型,网络编程,线程模型,零拷贝等等
    wxw752
        30
    wxw752  
       86 天前
    @diagnostics #29 哥们你这个坟一铲子挖哪年去了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1047 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:16 · PVG 07:16 · LAX 15:16 · JFK 18:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.