webgeekman
V2EX  ›  问与答

能否讨论以下,网关最适合用什么语言开发?

  •  
  •   webgeekman · Jan 13, 2014 · 7192 views
    This topic created in 4540 days ago, the information mentioned may be changed or developed.
    不讨论编程语言的优劣,毕竟各种语言都有其适合的场景。
    那么对于需要高处理性能,响应速度,流量大,并且有一些业务逻辑的网关来说,用什么语言编写最好呢?

    开始尝试用Java,基于Mina做二次开发,加上redis作为缓存,虽然性能还不错,但是对于网关来说,跟客户讲用java做的往往缺少一点说服力。

    想听听大家的意见,对于网关来说,那种语言更合适,更能在网关这种场景下发挥语言本身的优势?
    26 replies    1970-01-01 08:00:00 +08:00
    lightening
        1
    lightening  
       Jan 13, 2014   ❤️ 1
    Erlang?
    clino
        2
    clino  
       Jan 13, 2014   ❤️ 1
    golang ?
    语言层面就支持coroutine,觉得这种场合挺合适的
    G2bN4dbX9J3ncp0r
        3
    G2bN4dbX9J3ncp0r  
       Jan 13, 2014   ❤️ 1
    golang
    yangff
        4
    yangff  
       Jan 13, 2014
    不要怀疑是c……你需要榨取他的每一分效率。
    sinxccc
        5
    sinxccc  
       Jan 13, 2014
    大部分都是 C,小部分是 C 和 C++ 的混合。
    min
        6
    min  
       Jan 13, 2014
    客户如果指定语言就用指定的
    如果只指定了性能指标,你能满足就好了嘛
    webgeekman
        7
    webgeekman  
    OP
       Jan 13, 2014
    @lightening
    @clino
    @lidashuang 感谢推荐。查了一下,Erlang和Golang在特性上还真差不多,有待进一步对比。
    webgeekman
        8
    webgeekman  
    OP
       Jan 13, 2014
    @yangff
    @sinxccc
    @min
    难就难在并非客户指定,而是公司内部自行研发的产品,后续要投入到多个项目里面使用。
    做这种事情,C固然是最有说服力的,但是在一个较为大的团队里,加上成员多半C经验不行,很难执行下去。并且的确面对太多的工作量。所以Erlang和Golang这样的语言就容易成为首选了。
    yangff
        9
    yangff  
       Jan 13, 2014
    @webgeekman 那就换成员,换成C适用的成员。基本上这些东西都是写在操作系统/固件里面的,erlang和golang根本不适用。
    而且网关需要多复杂的逻辑?就是一个大门而已,更多复杂事情赞先别管了,放进来再说不行吗?后面还好多人呢!
    yangff
        10
    yangff  
       Jan 13, 2014   ❤️ 1
    或许叫做大门不严谨吧……但是,我的意思是更复杂的逻辑请先放进来在弄。
    yangff
        11
    yangff  
       Jan 13, 2014
    不过如果要说未来的趋势的话,如果能在可以接受的范围内让这些设备性能过剩的话,用erlang或者golang当然就都没有问题了。。
    guotie
        12
    guotie  
       Jan 13, 2014
    golang
    dhysum
        13
    dhysum  
       Jan 13, 2014
    Erlang和Golang什么时候开始这么受欢迎了? 网关一类的,目前还没有能替代C的吧?

    招一些做嵌入式的就好了
    clino
        14
    clino  
       Jan 13, 2014
    @yangff "基本上这些东西都是写在操作系统/固件里面的"
    看起来楼主并不是运行在固件里的
    yangff
        15
    yangff  
       Jan 13, 2014   ❤️ 1
    @clino 所以我也很奇怪啊,难道他用Windows Server做网关?
    pindleskin
        16
    pindleskin  
       Jan 13, 2014
    取决于对性能,延迟,可靠性等的要求。如果要达到百千兆路由器的性能和低延迟,只能用c或c++吧,其他需要运行在vm里或用垃圾回收的都不合适,vm太复杂,各种意外有可能发生,垃圾回收在高负载下需要大量的内存,有时候还需要把整个vm停下来几到几百毫秒。如果是应用网关,偶尔几十到几百毫秒的延迟可以忍受,那选择就多了。
    nsa
        17
    nsa  
       Jan 13, 2014
    C, 毫无疑问
    sinxccc
        18
    sinxccc  
       Jan 13, 2014
    @webgeekman 恕我直言,那你的团队里有没有对 Erlang 或者 Go 足够精通的人呢?

    网络设备上选择 C 居多而避开虚拟机,动态内存回收之类的高级功能的一个原因也是 C 在语言层面上简单,不会因为不熟悉而掉进语言自己的坑。
    tangzx
        19
    tangzx  
       Jan 13, 2014 via iPhone
    用c在nginx上做二次开发吧
    clino
        20
    clino  
       Jan 14, 2014
    @yangff 为什么一定要windows? 用linux一样可以用应用的方式来写网关的吧
    senghoo
        21
    senghoo  
       Jan 14, 2014
    我也是做网络设备的,我们的设备吞吐在2Gbps左右。
    核心部分必然是c。辅助用python。运行在linux下。

    首先这种设备得区分开必须要高效并保证实时性的部分和可以延迟执行的部分。前者用c,后者就随便一个语言。
    rrfeng
        22
    rrfeng  
       Jan 14, 2014
    我看到题目第一印象是『网关』是指什么

    果然后面讨论的很热烈但是仍有分歧,楼主说的『网关』指的是啥……
    keyman
        23
    keyman  
       Jan 14, 2014
    第一反应c,第二反应erlang。
    shanks
        24
    shanks  
       Jan 14, 2014
    同没搞明白,啥是网关,求科普。
    为何我想到SDN呢。。
    dorentus
        25
    dorentus  
       Jan 14, 2014
    网关是啥?

    用你们熟悉的语言。
    topkyo
        26
    topkyo  
       Jan 14, 2014
    首先这个网关定义就不明确,是嵌入式的还是web服务器型的?
    嵌入式的当然是用c/c++;web服务器的多了,哪个熟悉用那个
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2595 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 05:01 · PVG 13:01 · LAX 22:01 · JFK 01:01
    ♥ Do have faith in what you're doing.