2

我是 NodeJS 的新手,发现它非常有趣。我在使用 NodeJS 构建服务器方面没有太多问题。但是当我去开发一个 Web 浏览器客户端时,我开始了解 Socket.IO。但我对此感到非常困惑。我们可以在不使用 Socket.IOS 的 NodeJS 服务器的情况下开发 Web 客户端应用程序吗?

没有 Socket.IO 的 NodeJS 中是否支持 websocket?

4

3 回答 3

3

这个问题很老,但供将来参考。

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 的更简洁和复杂(我认为)和无缝的方法是使用

dnoderpc-streamBrowserify

证明:下面是我自己项目的客户端(浏览器)的代码: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 层

wssock-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 层

https://github.com/substack/dnode

https://github.com/dominictarr/rpc-stream

于 2014-02-24T01:48:56.047 回答
2

是的,socket-io 是一个可以与 node-js(和其他依赖项)一起使用的包,但在 node 中构建 web 应用程序时使用 socket-io 并不是强制性的。正常的 http 请求就可以了。您也可以在节点中使用 Web 套接字,而无需使用 socket-io。

于 2012-10-11T05:01:03.740 回答
2

当然,您可以在 socket.io 之外使用它。它只是npm 节点上可用的一个模块。

例如,使用 node 作为 web/http 服务器是很常见的——看看express。它是一个 Web 服务器,非常常见,不一定是 socket.io 应用程序。

Socket.io适用于您希望浏览器/客户端通过 html5 Web 套接字与服务器保持套接字的情况。在这种情况下,服务器可以回调客户端并将数据传回(与轮询相反)-基于服务器上的某些事件的回调,例如另一个客户端调用和更改数据。聊天应用程序就是典型的例子。

您看到 socket.io 与 node 一起被提及的原因是因为 node 是一个网络服务器,重量非常轻且速度快,因此适合并针对接近实时的网络场景进行了优化。

于 2012-10-11T05:01:45.847 回答