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

有人能说说 node.js net.socket 和 socket.io 的区别在哪吗?

  •  
  •   headwindx · 2014-11-27 18:44:55 +08:00 · 10882 次点击
    这是一个创建于 3642 天前的主题,其中的信息可能已经有所发展或是发生改变。
    13 条回复    2016-06-13 00:26:26 +08:00
    bsbgong
        1
    bsbgong  
       2014-11-27 20:24:06 +08:00   ❤️ 1
    socket.io是一个WebSocket协议的实现,用它你可以进行websocket通信,这是应用层
    node.js net.socket是系统socket接口,用它你可以操作linux socket,这是传输层
    bsbgong
        2
    bsbgong  
       2014-11-27 20:31:53 +08:00   ❤️ 1
    再补充一点websocket: http://tools.ietf.org/html/rfc6455

    websocket协议本质上也是使用系统socket,它是把socket引入了http通信,也就是不使用80端口进行http通信。它的目的是建立全双工的连接,可以用来解决服务器客户端保持长连接的问题。

    socket.io只是websocket协议的一种实现。除此之外,HTML5也对websocket定义了对应的API,由浏览器等客户端程序实现它。这样最上层的web应用程序就能直接使用websocket连接了。
    skybr
        3
    skybr  
       2014-11-27 20:54:53 +08:00
    如果寻求net.socket和socket.io之间关系, net.socket操作tcp, 往上的http基于tcp, http再往上就是不同浏览器了, socket.io分拆出的engine.io就是基于各种transports解决不同浏览器类似websocket双向通讯需求兼容的包, 再往上的socket.io是基于engine.io的一系列约定俗成的通用业务封装.
    yanchao7511461
        4
    yanchao7511461  
       2014-11-28 09:40:53 +08:00
    觉历
    hussion
        5
    hussion  
       2014-11-28 09:47:26 +08:00   ❤️ 1
    net.socket 是node.js提供的socket编程接口,只能用于socket通信;

    socket.io是一个websocket库,不仅支持websocket,还能优雅降级,支持flash-socket,long-polling等通信。
    headwindx
        6
    headwindx  
    OP
       2014-11-28 11:24:01 +08:00
    @bsbgong socket.io 是对 net.socket 的一个封装还是跟他是对等的一个框架。
    headwindx
        7
    headwindx  
    OP
       2014-11-28 11:29:33 +08:00
    我看看 socket.io 源码先
    headwindx
        8
    headwindx  
    OP
       2014-11-28 11:43:06 +08:00
    @hussion 你说的优雅降级,指的是?
    ahtsiu
        9
    ahtsiu  
       2014-11-28 14:57:49 +08:00   ❤️ 1
    socket.io 是一个用来为网页提供双工长连接的框架,所以他实际上包含服务端(node.js)和客户端(浏览器里的js)。上面提到的优雅降级意思是可以根据浏览器的具体情况选择使用websocket 或者flash-socket 甚至iframe 不停刷新等方式来实现,毕竟不是所有浏览器都支持websocket 甚至不是所有浏览器都支持flash。而不管使用什么实现,socket.io 都封装成统一的api,使用起来没有差别。
    headwindx
        10
    headwindx  
    OP
       2014-11-28 15:15:14 +08:00
    感谢大家的积极回复!
    bsbgong
        11
    bsbgong  
       2014-11-28 19:34:27 +08:00
    @headwindx

    你要记得有server和client两个角色。
    net.socket是node模块,只能在server端使用它,宿主是node,操作的是node所在的操作系统的socket资源。
    socket.io则包含了两个模块,分别在server端和client端使用。client端的宿主一般是浏览器。
    它俩都不是框架,只能叫库或者模块。

    你动手使用socket.io写一个聊天程序,就明白了。
    headwindx
        12
    headwindx  
    OP
       2014-11-30 12:13:33 +08:00
    @bsbgong 恩,多谢。 以前研究过点 bsdsocket server 和 client的程序,现在想把net.socket ,socket.io,bsdsocket 这几个概念梳理一下。
    xu33
        13
    xu33  
       2016-06-13 00:26:26 +08:00
    但是看了 socket.io 的源码 发现并没用到 net 模块
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1944 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:31 · PVG 08:31 · LAX 16:31 · JFK 19:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.