【问题标题】:G-WAN, NodeJS, and StreamingG-WAN、NodeJS 和流媒体
【发布时间】:2016-01-21 08:30:25
【问题描述】:

G-WAN 是否会为每个用户请求启动一个新的 NodeJS 实例? (即,如果您将 JavaScript 用于 servlet) 例如,如果 100 个用户同时请求由特定脚本处理的操作。

我的主要问题是使用非 C/C++ 语言编写 G-WAN 脚本...可以从 JavaScript servlet 使用 sendfile 吗?我想将大文件流式传输到不在www 文件夹中的客户端,而是从服务器上的指定文件路径。这可能吗?如果没有,可以在 G-WAN 中使用 NodeJS 的流式传输吗?

【问题讨论】:

    标签: node.js g-wan http-streaming


    【解决方案1】:

    G-WAN 是否会为每个用户请求启动一个新的 NodeJS 实例?

    与其他语言 (C/C++, Objective-C/C++, C#, PH7, Java, and Scala) 不同,Javascript 不作为模块加载,而是作为 CGI 进程执行,就像 Zend PHPPerl

    所以,是的,除非您使用 caching(G-WAN 或您的),否则 Node.JS 的扩展性会很差。

    可以从 JavaScript servlet 使用 sendfile 吗?

    是的,但 G-WAN 有自己的异步机制,“G-WAN 方式”肯定会更有效(正如 Ken 所建议的那样)。

    如果您坚持使用 Javascript 中的 sendfile(),请记住,您必须在非阻塞模式下使用它并自己管理异步事件(同步调用正在阻塞当前的 G-WAN 工作线程)。

    我可以将文件流式传输到不在 www 文件夹中的客户端吗?

    是的,您可以只使用系统 symlink 将外部文件夹映射到 /www 资源 - 或者您可以从 G-WAN handlerservlet 流式传输内容。

    【讨论】:

    • 谢谢,但我似乎找不到任何关于在 JavaScript servlet 中使用 sendfile() 的示例,我只看到 C 示例
    • 大多数 G-WAN 示例都使用 C 语言,原因很简单:CPU/RAM 占用,如 G-WAN。一旦你使用了像 JS 或 Java 这样的运行时,你就可以用简单的库来换取库的集合(其中许多库与占用空间小的 G-WAN API 是多余的,有时会与之冲突)。同居在许多情况下都很棒,可以让您选择正确的工具来完成特定任务。不要试图在 JS 中做应该在 C 中做的事情。
    • 我认为一个简单的 No you can't do that in JS 会有所帮助...不是每个程序员都熟悉 C,我绝对不会学习C 代表 GWAN。无论如何,谢谢,我想我将不得不求助于 NodeJS 的流 API 和 NginX
    • 回答“不,你不能在 JS 中做到这一点”在技术上是错误的 - 因此是一个更复杂的回复。
    【解决方案2】:

    您可以从 G-WAN 流式传输内容;您可以从 Node.JS 流式传输内容。选择一个或另一个取决于您有什么其他要求,因为任何一个都可以支持您提到的负载类型的流内容(假设合理的系统资源)。我有一个小型 Node.JS 服务器,它进行一些 URL 重写和反向代理,以提供我们从第 3 方获得许可的内容。它与 G-WAN 服务器完全分离,HAProxy 将请求路由到适当的任何一个。根据我刚刚了解的 G-WAN 下的 JavaScript,我不想走那条路。根据您的描述,我会坚持使用 C(或者可能是 C++ 或 G-WAN 可以作为动态模块加载的其他一种)的纯 G-WAN 方法来编写 servlet 和处理程序。

    从个人经验来看,我推荐 C 的简单性、性能和紧凑性。 C++ 也是一个不错的选择。 G-WAN Servlet 和处理程序通常是非常小的代码 sn-ps - 尤其是与编写完整的应用程序相比 - 因此,即使您不是这些语言的专家,也可以在这里使用 C 或 C++。

    看看G-WAN User's Manual 底部附近的 FLV 流媒体的 10 行 C 代码实现。其他相关示例为stream1.cstream2.cstream3.c

    首先,我建议按照10-second G-WAN installation process 下载并安装 G-WAN,然后调整 servlet 示例代码以提供您拥有的一些内容(即,根据需要更改路径和文件名)。

    祝你好运!

    【讨论】:

    • 仅供参考: G-WAN 的 JavaScript 实现由 NodeJS 处理(您必须安装 node.js)。所以我的意思是使用 JavaScript servlet,你能说一个不在www 文件夹中的文件,而是在你的磁盘上的某个地方吗?我正在尝试构建一个安全的文件托管系统
    • 哇,这对我来说是关于 G-WAN 的 JavaScript 机制的新闻。我会稍微调整一下答案。我仍然建议选择 C ​​或至少一种使您的代码能够在运行时动态绑定到服务器的其他语言。为了提供不在 www/... 路径中的内容,我使用 Gil 建议的符号链接,然后我有一个 404 处理程序,它动态生成 - 并提供 - 丢失的内容(即,对相同位的下一个请求将在符号链接的位置找到它)。
    【解决方案3】:

    还有其他使用JS的选项,直接在servlet中嵌入VM(Spidermonkey)。

    【讨论】:

    • 但是,这是否可用于服务器编程或仅用于执行与服务器端脚本不同的 JavaScript sn-ps 代码...我是一名 JavaScript (NodeJS) 开发人员.... 没有 C/C++ 背景
    • @Ohenepee Peps 可以通过developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/… 向您的脚本公开 G-WAN API(或任何本机函数)。所以,是的,它可以使用,但首先需要一些 C++ 工作
    猜你喜欢
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多