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

2014-11-27 18:44:55 +08:00
 headwindx
10915 次点击
所在节点    Node.js
13 条回复
bsbgong
2014-11-27 20:24:06 +08:00
socket.io是一个WebSocket协议的实现,用它你可以进行websocket通信,这是应用层
node.js net.socket是系统socket接口,用它你可以操作linux socket,这是传输层
bsbgong
2014-11-27 20:31:53 +08:00
再补充一点websocket: http://tools.ietf.org/html/rfc6455

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

socket.io只是websocket协议的一种实现。除此之外,HTML5也对websocket定义了对应的API,由浏览器等客户端程序实现它。这样最上层的web应用程序就能直接使用websocket连接了。
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
2014-11-28 09:40:53 +08:00
觉历
hussion
2014-11-28 09:47:26 +08:00
net.socket 是node.js提供的socket编程接口,只能用于socket通信;

socket.io是一个websocket库,不仅支持websocket,还能优雅降级,支持flash-socket,long-polling等通信。
headwindx
2014-11-28 11:24:01 +08:00
@bsbgong socket.io 是对 net.socket 的一个封装还是跟他是对等的一个框架。
headwindx
2014-11-28 11:29:33 +08:00
我看看 socket.io 源码先
headwindx
2014-11-28 11:43:06 +08:00
@hussion 你说的优雅降级,指的是?
ahtsiu
2014-11-28 14:57:49 +08:00
socket.io 是一个用来为网页提供双工长连接的框架,所以他实际上包含服务端(node.js)和客户端(浏览器里的js)。上面提到的优雅降级意思是可以根据浏览器的具体情况选择使用websocket 或者flash-socket 甚至iframe 不停刷新等方式来实现,毕竟不是所有浏览器都支持websocket 甚至不是所有浏览器都支持flash。而不管使用什么实现,socket.io 都封装成统一的api,使用起来没有差别。
headwindx
2014-11-28 15:15:14 +08:00
感谢大家的积极回复!
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
2014-11-30 12:13:33 +08:00
@bsbgong 恩,多谢。 以前研究过点 bsdsocket server 和 client的程序,现在想把net.socket ,socket.io,bsdsocket 这几个概念梳理一下。
xu33
2016-06-13 00:26:26 +08:00
但是看了 socket.io 的源码 发现并没用到 net 模块

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/149768

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX