Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 通过websocket播放音频_Node.js_Websocket - Fatal编程技术网

Node.js 通过websocket播放音频

Node.js 通过websocket播放音频,node.js,websocket,Node.js,Websocket,我正在建立一个聊天室,如果有新消息,我希望用户收到一个声音通知。目前,我正在发送客户端将收到的所有文件,如下所示: var http_files = {}; [ ["/jquery.min.js","application/javascript"], ["/css/main.css","text/css"], ["/resumesound.mp3","audio/mpeg"], <-- doesn't work ["/css/normalize.css",

我正在建立一个聊天室,如果有新消息,我希望用户收到一个声音通知。目前,我正在发送客户端将收到的所有文件,如下所示:

var http_files = {};
 [
    ["/jquery.min.js","application/javascript"],
    ["/css/main.css","text/css"],
    ["/resumesound.mp3","audio/mpeg"], <-- doesn't work
    ["/css/normalize.css","text/css"],
    ["/js/main.js","text/javascript"],
    ["/js/vendor/modernizr-2.6.2.min.js","text/javascript"],
    ["/chat-frontend.js","application/javascript"],
    ["/index.html","text/html"]
 ].forEach(function(fn){
     http_files[fn[0]]={
         content : fs.readFileSync('.'+fn[0]).toString(),
         contentType : fn[1]
     };
 });
var server = http.createServer(function(request, response) {
     // this doubles as a way to serve the files, and a connection for websocket to use
     var file = http_files[request.url];
     if (file) {
         response.writeHeader(200,{"content-type" : file.contentType});
         response.write(file.content);
         return response.end();
     }
     response.writeHeader(404,{"content-type" : "text/plain"});
     response.write("not found");
     return response.end();

 });

由于音频是二进制的,而不是纯文本的,所以在将文件发送给客户端之前,我必须“取消字符串化”

改变这一行就成功了:

content : fs.readFileSync('.'+fn[0]).toString(),
致:

代码:

var http_files = {};
 [
    ["/jquery.min.js","application/javascript"],
    ["/css/main.css","text/css"],
    ["/resumesound.mp3","audio/mpeg"],
    ["/css/normalize.css","text/css"],
    ["/js/main.js","text/javascript"],
    ["/js/vendor/modernizr-2.6.2.min.js","text/javascript"],
    ["/chat-frontend.js","application/javascript"],
    ["/index.html","text/html"]
 ].forEach(function(fn){
     http_files[fn[0]]={
         content : fs.readFileSync('.'+fn[0]).toString(),
         contentType : fn[1]
     };
 });

嗯,我看到一个toString()发生在二进制内容上…@Gimby哦,是的,你是对的。我甚至没想过。嗯,如果我使用二进制流,那么问题就解决了?
content : fs.readFileSync('.'+fn[0]),
var http_files = {};
 [
    ["/jquery.min.js","application/javascript"],
    ["/css/main.css","text/css"],
    ["/resumesound.mp3","audio/mpeg"],
    ["/css/normalize.css","text/css"],
    ["/js/main.js","text/javascript"],
    ["/js/vendor/modernizr-2.6.2.min.js","text/javascript"],
    ["/chat-frontend.js","application/javascript"],
    ["/index.html","text/html"]
 ].forEach(function(fn){
     http_files[fn[0]]={
         content : fs.readFileSync('.'+fn[0]).toString(),
         contentType : fn[1]
     };
 });