【问题标题】:REST API-Centric application, with web sockets, using node.js?以 REST API 为中心的应用程序,带有 web 套接字,使用 node.js?
【发布时间】:2015-12-14 05:43:13
【问题描述】:

我从未做过任何 API,我最近才开始了解 REST,从未使用过套接字或 node.js,但我有一个使用所有这些的简单项目。

想象一下带有请求/响应内容的普通应用。没有什么花哨。但有时我需要实时功能,比如说有对网站的实时支持,一个聊天。所以大多数用户从不需要套接字,一切都很容易,但是当他们这样做时,那又是什么呢?与restful api一起看起来和工作如何?

【问题讨论】:

    标签: node.js api rest socket.io


    【解决方案1】:

    当您标记时,socket.io 非常适合您。它使用 websockets 和 longpolling 在浏览器中创建一个到您的服务器的套接字,而无需用户安装任何第三方程序。而对于使用旧浏览器且没有这些浏览器内置功能的用户,它可以回退到第三方插件:Flash Player,但几乎所有浏览器都安装了它。

    你是否习惯了 Javascript 或面向对象的编程,socket.ionode.js 是在公园里散步。如果您不想使用node.jssocket.io,您可以使用以下信息编写自己的客户端-服务器实现:

    WebSockets
    Long Polling example
    Flash AS3 Socket

    作为一个小补充,您只需要在默认端口 80 中运行您的默认 Web 服务器(Apache、Nginx、Lighthttpd 等),并在其他端口(例如 8080)中运行 node.js 服务器。第二个服务器将为连接所需的所有文件提供服务,因为socket.io 只能连接到为文件提供服务的同一域和端口(我猜是出于安全原因)。

    简而言之,您将拥有 2 台服务器:一台服务于您的整个网页,另一台服务于连接到您的聊天所需的文件(显然也提供聊天服务)。

    我在我的一个页面(一个直播体育流媒体网站)中进行了该配置,并将聊天添加到我的网站,我在端口 8080 中运行 this server,并将其加载到 iframe 内的主页中: http://www.example.com:8080/

    作为补充,你可以在node.js中创建一个完整的http服务器,但我不认为它作为一个专业的web服务器有用。

    【讨论】:

    • Restful api 中的 URI 会是什么样子?如果我想在两个用户之间打开套接字进行聊天?像 api.domain.com/chat/users/{user_id} ?它也不是get/put/delete/post,因为它是连续连接的,如何从其他方面解决这个问题?或者当我想到套接字时,我需要忘记 REST?
    • 如果你想要带有实时通知的套接字,你应该忘记 REST。另一方面,使用 REST,您只需执行一个“循环”,每 X 秒向服务器询问新消息,但这会无缘无故地造成过载(大多数情况下,浏览器会要求新消息为空回复),并且消息也不会是“实时/0延迟”,因为只有当循环要求新消息时,用户才会收到新的聊天消息。这就引出了另一个问题,循环询问的速度越快,消息的实时性就越高,但您在服务器上创建的过载也就越多。
    • 我搜索了更多,那里有一些实现,可以让 socket.io:stackoverflow.com/questions/6339393/… 休息,所以你的问题是完全可行的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2018-07-20
    • 2020-03-25
    • 1970-01-01
    • 2013-06-09
    • 2016-01-22
    相关资源
    最近更新 更多