Node.js通过套接字发送HTTP的二进制数据

4

我正在编写自己的http模块(我知道node.js已经包含了这个模块) 我正在使用net模块 当我收到一个静态二进制文件(如图片)的请求时,我该如何生成带有二进制文件的HTTP响应? 当我对文本文件(如html文件)执行相同操作时,它可以正常工作。


我可以问一下你为什么要自己写吗?你需要编写一个HTTP请求解析器,然后确保你的响应具有正确的标头。你能发一下你已经写好的代码吗?当你请求图像时到底出了什么问题?你是如何发送测试请求的? - loganfsmyth
1
我写了一个HTTP/1.1解析器,当我发送HTML文件时它可以工作,但是当我发送图片时它无法显示(我发送了正确的内容类型)。 - ciochPep
1个回答

3
如果您正在使用net模块,那么您可能会使用类似以下代码的内容:
var server = net.createServer(function (socket) { 
});

Socket是什么?它代表着在网络上的数据流。在对象中,Socket是一个可写流,请查看这里获取更多信息:http://nodejs.org/docs/v0.6.5/api/streams.html 当您读取文件时,可以将内容作为字符串、缓冲区或可读流获取。
以流的方式读取文件最简单的方法是使用函数:http://nodejs.org/docs/v0.6.5/api/fs.html#fs.createReadStream,例如:
var fileAsAstream = fs.createReadStream(filePath); 

为了将二进制读流的内容传输到写流中,您可以使用 pipe 函数http://nodejs.org/docs/v0.6.5/api/streams.html#stream.pipe,示例如下:
fileAsAstream.pipe(socket);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接