我是 NodeJS 的新手,发现它非常有趣。我在使用 NodeJS 构建服务器方面没有太多问题。但是当我去开发一个 Web 浏览器客户端时,我开始了解 Socket.IO。但我对此感到非常困惑。我们可以在不使用 Socket.IOS 的 NodeJS 服务器的情况下开发 Web 客户端应用程序吗?
没有 Socket.IO 的 NodeJS 中是否支持 websocket?
这个问题很老,但供将来参考。
Socket.IO 很有名,对于节点流https://github.com/substack/stream-handbook你应该很感兴趣。
我个人在我自己的项目中这样做:
http://kenokabe.github.io/MarkdownLive/
我用 Markdown 写东西,需要一个流媒体预览,所以我自己创建了。预览屏幕是一个浏览器 HTML 页面,HTML 内容以流的方式呈现和更新。
这种技术通常被称为RPC(remote procedure call)
. Socket.IO 对很多人来说都很熟悉,你可以在网上找到丰富的资源,所以开始吧。
但是,我个人不再使用它,因为它是一个巨大的库,仅用于在节点和浏览器之间进行 RPC,尤其是当您知道除了 websocket 之外不需要任何回退时。
在这里做 RPC 的更简洁和复杂(我认为)和无缝的方法是使用
证明:下面是我自己项目的客户端(浏览器)的代码:http: //kenokabe.github.io/MarkdownLive/
https://github.com/kenokabe/MarkdownLive/blob/master/www/js/index.js
(function() //-----
{
"use strict";
$(document)
.ready(function()
{ //--------------------------
$('#streamDIV')
.html('<h1>MarkdownLive</h1><h3>Markdown Streaming Live View for SublimeText3</h3><br><h4><strong>Open</strong> <br><br>.md<br>.markdown<br>.mdown<br>.mkdn<br>.mkd<br>.mdwn<br>.mdtxt<br>.mdtext<br>.text<br>.txt</h4>');
var through = require('through');
var stream = require('shoe')('/stream')
.pipe(through(function(data)
{
$('#streamDIV')
.html(data);
}));
//-------------------------
});
}());
正确使用 node.js 流,可以用简洁的声明式编程或 FRP 方式编写服务器-客户端 RPC 代码。
在 node.js Web Sockets 服务器端实现中没有 webSocket 的本机实现 NodeJS 和 Socket.IO 基于ws。
WebSocket 层
ws
或sock-js或其他。
流层
https://github.com/maxogden/websocket-stream for ws
https://github.com/NodeGuy/WebSocketStream for ws
https://github.com/kenokabe/WebSocketStreamPlus(我的工作基于 NodeGuy 的)
https://github.com/substack/shoe用于 sock-js
RPC 层
是的,socket-io 是一个可以与 node-js(和其他依赖项)一起使用的包,但在 node 中构建 web 应用程序时使用 socket-io 并不是强制性的。正常的 http 请求就可以了。您也可以在节点中使用 Web 套接字,而无需使用 socket-io。
当然,您可以在 socket.io 之外使用它。它只是npm 节点上可用的一个模块。
例如,使用 node 作为 web/http 服务器是很常见的——看看express。它是一个 Web 服务器,非常常见,不一定是 socket.io 应用程序。
Socket.io适用于您希望浏览器/客户端通过 html5 Web 套接字与服务器保持套接字的情况。在这种情况下,服务器可以回调客户端并将数据传回(与轮询相反)-基于服务器上的某些事件的回调,例如另一个客户端调用和更改数据。聊天应用程序就是典型的例子。
您看到 socket.io 与 node 一起被提及的原因是因为 node 是一个网络服务器,重量非常轻且速度快,因此适合并针对接近实时的网络场景进行了优化。