从socket.io - node.js收到消息时,从客户端播放音频

时间:2014-06-12 14:23:34

标签: javascript node.js sockets audio

我已经搜索了一段时间来解决这个问题,但是找不到太多。

我的目标是从udp客户端接收消息,服务器接收该消息并转发到Web客户端,每次收到消息时都会播放音频剪辑。但是,由于某种原因,音频将无法播放。如果我直接从我的目录打开页面,可以播放音频,但如果我尝试通过localhost访问它,则无法加载。有谁知道解决方案?

这是客户端javascript。

var mySound = new Audio('/public/audio/Bloom.mp3');
mySound.load();
var socket = io.connect('http://localhost');
socket.on('message', function(data){
    console.log(data);
    $('#content').text(data);
    mySound.play();
    //document.getElementById('audiotag1').play();
});

此页面由server.js提供,这是一个使用socket.io和express的node.js文件。我的console.log没有收到任何错误。 这是server.js

var app = require('express')()
    , server = require('http').Server(app)
    , io =require('socket.io')(server)
    , dgram = require('dgram');

var httpPort = 1234;
var udpPort = 5000;

server.listen(httpPort);

app.use(server.express.static( __dirname + '/public'));

app.get('/', function(request, response){
    var ipAddress = request.socket.remoteAddress;
    console.log("New express connection from: " + ipAddress);
    response.sendfile(__dirname + '/public/index.html');
});

var udpSocket = dgram.createSocket('udp4', function(msgBuffer){
    var jsonMessage = JSON.parse(msgBuffer);
    io.sockets.emit('message', JSON.stringify(jsonMessage));
});
udpSocket.bind(udpPort, '127.0.0.1');

您可以转到此链接查看Chrome错误。 http://postimg.org/image/xkv7a2kwb/

有没有人对如何解决这个问题有任何想法?

1 个答案:

答案 0 :(得分:0)

当您对静态文件的Express配置不正确时,通常会发生此错误。

从客户端JavaScript我可以看到您将静态文件存储在public文件夹中。

所以在服务器端的某个地方你应该有这样的东西:

app.use('/public', express.static('/path/to/public'));

这样http://localhost/public/audio/Bloom.mp3请求将与/path/to/public/audio/Bloom.mp3文件一起提供。

<强>警告:

从Express 4开始,"no more app.use(app.router)"和“所有路由方法将按照它们出现的顺序添加”。这意味着您必须在上一行app.get(...)app.post(...)等之前添加上述代码。

希望这些信息对某人有所帮助。