首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Node.js
Express
PPA for Ubuntu
ppa:chris-lea/node.js
V2EX  ›  Node.js

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

  •  
  •   headwindx · 2014-11-27 18:44:55 +08:00 · 8425 次点击
    这是一个创建于 1727 天前的主题,其中的信息可能已经有所发展或是发生改变。
    13 回复  |  直到 2016-06-13 00:26:26 +08:00
        1
    bsbgong   2014-11-27 20:24:06 +08:00   ♥ 1
    socket.io是一个WebSocket协议的实现,用它你可以进行websocket通信,这是应用层
    node.js net.socket是系统socket接口,用它你可以操作linux socket,这是传输层
        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连接了。
        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的一系列约定俗成的通用业务封装.
        4
    yanchao7511461   2014-11-28 09:40:53 +08:00
    觉历
        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等通信。
        6
    headwindx   2014-11-28 11:24:01 +08:00
    @bsbgong socket.io 是对 net.socket 的一个封装还是跟他是对等的一个框架。
        7
    headwindx   2014-11-28 11:29:33 +08:00
    我看看 socket.io 源码先
        8
    headwindx   2014-11-28 11:43:06 +08:00
    @hussion 你说的优雅降级,指的是?
        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,使用起来没有差别。
        10
    headwindx   2014-11-28 15:15:14 +08:00
    感谢大家的积极回复!
        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写一个聊天程序,就明白了。
        12
    headwindx   2014-11-30 12:13:33 +08:00
    @bsbgong 恩,多谢。 以前研究过点 bsdsocket server 和 client的程序,现在想把net.socket ,socket.io,bsdsocket 这几个概念梳理一下。
        13
    xu33   2016-06-13 00:26:26 +08:00
    但是看了 socket.io 的源码 发现并没用到 net 模块
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   883 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 20:59 · PVG 04:59 · LAX 13:59 · JFK 16:59
    ♥ Do have faith in what you're doing.