我http.request()
在正常的HTTP服务器上使用Node的基本功能没有问题。我需要对http.request()
SHOUTcast服务器使用(或类似方法)。SHOUTcast“协议”与HTTP完全兼容,除了一个细节外……第一个响应行。
普通HTTP服务器的响应为:
HTTP/1.1 200 OK
SHOUTcast服务器响应:
ICY 200 OK
同样,其余协议相同。唯一的区别是HTTP/1.x
对ICY
。
我想扩展,子类化或以某种方式修改Node的http.request()
功能,以便可以使其与SHOUTcast服务器一起使用。使用Node连接到SHOUTcast
之前已经完成,但是只能通过重新发明整个轮子来完成。我宁愿不这样做,因为这只是协议的微小差异。
扩展或覆盖 Node的HTTP解析器的相关部分。(我怀疑这是否可行,因为解析器似乎是本机代码。)
创建我自己 的代码,解析HTTP的相关部分,但将尽可能多的现有Node组件重用于HTTP。
创建一个简单的内部代理 (或以某种方式中继数据),以便我可以在第一个服务器响应行到达Node的HTTP解析器之前对其进行修改。
还有吗
我也考虑过使用Shred,但是它没有提供流响应的选项。(它会在触发事件之前等待整个服务器响应完成,这对于数据可以无限期运行的流服务器不起作用。)同样,我尝试了Request,但是它使用Node自己的HTTP解析器,因此我得到与本机HTTP客户端相同的解析错误。
我想出了另一种方式来做到这一点,类似于内部代理,但没有额外的连接。似乎可以为HTTP客户端覆盖内部使用的套接字。完成此操作后,在将数据传递给原始内部套接字ondata
功能之前,很容易挂接和修改数据。
var httpicy = new HttpIcyClient();
httpicy.request(/* your normal request parameters here */);
var http = require('http');
var HttpIcyClient = function () {};
HttpIcyClient.prototype.request = function (options, callback) {
var req = http.request(options, callback),
originalOnDataFunction,
receiveBuffer = new Buffer(0);
req.on('socket', function (socket) {
originalOnDataFunction = socket.ondata;
socket.ondata = function (d, start, end) {
receiveBuffer = Buffer.concat([receiveBuffer, d.slice(start, end)]);
if (receiveBuffer.length >= 4) {
socket.ondata = originalOnDataFunction;
if (receiveBuffer.toString('ascii', 0, 4) === 'ICY ') {
receiveBuffer = Buffer.concat([new Buffer('HTTP/1.0 ', 'ascii'), receiveBuffer.slice(4)]);
}
socket.ondata.apply(this, [receiveBuffer, 0, receiveBuffer.length]);
}
};
});
return req;
}
本文向大家介绍Java方法覆盖重写实现原理解析,包括了Java方法覆盖重写实现原理解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Java方法覆盖重写实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方法覆盖重写注意事项: 1.必须保证方法名相同,返回值也相同 @Override:写在方法前面,用来检测方法的覆
现代CameraX API围绕用例展开(预览、拍照和图像分析)。然而,根据我的观察和文档,ImageAnalysis似乎武断地限制在1080: 图像分析可以选择的最大可用分辨率限制在1080p以下。对于图像分析来说,1080p的限制考虑了性能和质量两方面的因素,使用户在1080p下可以获得质量合理、平滑的输出流。
本文向大家介绍解析Java继承中方法的覆盖和重载,包括了解析Java继承中方法的覆盖和重载的使用技巧和注意事项,需要的朋友参考一下 方法的覆盖 在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称、返回值类型、参数列表。 如果在新类中定义一个方法,其名称、返回值类型和参数列表正好与父类中的相同,那么,新方法被称做覆盖旧方法。 参数列
问题内容: 看一下下面的代码,它显示列表理解。 当您在 Python 2.6中 执行代码示例时,它将显示 99 ,但是在 Python 3.x中 执行它时,将显示 6 。 更改行为的原因是什么,为什么 Python 3.x中 的输出 6 是? __ 先感谢您! 问题答案: 旧的行为是一个错误,但是由于某些代码依赖于此,因此无法轻松修复。 列表推导中的变量应与顶层变量不同。从逻辑上讲,它应该有自己的
问题内容: 我们很少有扩展基本类的类。我们注意到我们使用了“退出一些睡眠”方法,并且希望在发生睡眠时进行记录。有没有一种方法可以覆盖Thread.sleep方法,在其中我可以添加一些自定义逻辑(即记录),然后仅调用实际的Thread.sleep()?这样,我就不必更改在我的基类中使用Thread.sleep的所有位置。我也愿意接受其他选择。 问题答案: 您不能重写方法,因为它是本机方法,所以无法对
我正在开发一个Spring集成/引导应用程序。我正在使用一个多文档(src/main/Resources/application.yml)来设置几个配置类的默认值(用@ConfigurationProperties注释)。pplicaiton.yml带有默认值,其中一些需要被覆盖,具体取决于环境。 我可以在目录中使用Java系统属性(-D...=...)、Spring“属性”(--...=...)