Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了覆盖Node.js HTTP解析器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_262_4@ 我在普通的http服务器上使用Node的基本http.request()函数没有问题.我需要在SHOUTcast服务器上使用http.request()(或类似的). SHOUTcast“协议”与http完全兼容,除了一个细节……第一个响应行.

普通http服务器响应:

http/1.1 200 OK

SHOUTcast服务器响应:

ICY 200 OK

同样,协议的其余部分是相同的.唯一的区别是http / 1.x与ICY.

我想扩展,子类或以某种方式修改Node的http.request()函数,以便我可以使它与SHOUTcast服务器一起使用.使用节点has been done before连接到SHOUTcast,但只能通过重新发明整个轮子.我宁愿不这样做,因为它只是一个小的协议差异.

我的问题:有没有办法做到以下其中一种?

>扩展或覆盖Node的http解析器的相关部分. (我怀疑这是可能的,因为它似乎是@L_489_7@.)
>创建我自己的代码来解析http的相关部分,但尽可能多地重用http的现有Node组件.
>创建一个简单的内部代理(或以某种方式中继数据),以便我可以在它到达Node的http解析器之前修改一个服务器响应行.
>还有别的吗?

我也虑使用Shred,但它没有提供流式响应的选项. (它等待整个服务器响应在触发事件之前完成,这对于数据无限期运行的流服务器不起作用.)沿着同样的路线,我尝试了Request,但它使用了Node自己的http解析器,所以我得到与原生http客户端相同的解析错误.

解决方法

砰.你说对了.

使用Node.js net object创建实际位于用户http服务器之间的TCP服务器.如您所述,替换所有请求和响应的第一行,您可以继续按原样继续使用http服务器. (您在非标准端口上创建内部http服务器,在另一个端口上创建网络服务器,然后在两者之间链接流,使用一些代码拦截来自请求用户的第一个数据块,以及第一个块来自响应服务器的数据.)

你在Javascript中的所有代码,它都是(几乎)没@R_10_5343@bloat流.

编辑,似乎我误读了你的帖子.我看到你并没有尝试实现Node.js shoutcast服务器,而是尝试从中访问数据.净对象应该仍然有效,但不是完全相同的.

您需要使用Net.connect与指定的shoutcast服务器通信,并使用知道net.connect流的新网络服务器在它与您的http.request()之间进行代理.所以,它会像:

+---------------+    +----------+    +-----------+    +----------------+
| http.request()|--->|net.Server|--->|net.connect|--->|SHOUTcast Server|
|               |<---|          |<---|           |<---|                |
+---------------+    +----------+    +-----------+    +----------------+
                  TCP             JS               TCP

这就是我如何构建它.

大佬总结

以上是大佬教程为你收集整理的覆盖Node.js HTTP解析器全部内容,希望文章能够帮你解决覆盖Node.js HTTP解析器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。