Socket.IO是否必须为NodeJS服务器开发客户端应用程序?

时间:2012-10-11 04:50:07

标签: node.js websocket socket.io

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

在没有Socket.IO的情况下,是否支持NodeJS中的websockets?

3 个答案:

答案 0 :(得分: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-stream   与Browserify

证明:以下是我自己项目的客户端(浏览器)上的代码: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中没有webSocket的本机实现 Web Sockets server side implementation for NodeJS 和 Socket.IO基于ws

WebSocket图层

wssock-js或其他人。

流图层

https://github.com/maxogden/websocket-stream代表ws

https://github.com/NodeGuy/WebSocketStream代表ws

https://github.com/kenokabe/WebSocketStreamPlus(我的作品基于NodeGuy的作品)

对于sock-js

https://github.com/substack/shoe

RPC图层

https://github.com/substack/dnode

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

例如,将节点用作web / http服务器非常常见 - 请查看express。它是一个Web服务器,很常见,不一定是socket.io app。

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

你看到socket.io与节点一起提到的原因是因为节点是一个非常轻量级和快速的网络服务器,因此适合并针对接近实时的网络场景进行优化。