Javascript Socket.io按钮侦听器在移动设备上不工作

Javascript Socket.io按钮侦听器在移动设备上不工作,javascript,node.js,sockets,socket.io,mobile-browser,Javascript,Node.js,Sockets,Socket.io,Mobile Browser,我正在Node.js和socket.io中编写一个web应用程序。我有两个按钮监听器,当用户单击一个按钮,然后执行一个特定的操作(在本例中,播放一个小调)时,这些监听器会拾取该按钮。出于某些原因,这些按钮在Chrome/Chrome中工作得很好,但在Firefox或移动浏览器中不起作用(我已经用iOS上的Safari和Android上的Chrome对其进行了测试) 这是我的密码: var socket = io.connect('http://localhost:5000'); var lon

我正在Node.js和socket.io中编写一个web应用程序。我有两个按钮监听器,当用户单击一个按钮,然后执行一个特定的操作(在本例中,播放一个小调)时,这些监听器会拾取该按钮。出于某些原因,这些按钮在Chrome/Chrome中工作得很好,但在Firefox或移动浏览器中不起作用(我已经用iOS上的Safari和Android上的Chrome对其进行了测试)

这是我的密码:

var socket = io.connect('http://localhost:5000');

var long = document.getElementById('long');
short = document.getElementById('short');

long.addEventListener('click', function() {
socket.emit('long', socket.id);
socket.broadcast.emit('audio file', {
    audio: true,
    audioBuffer: buf
});
});

short.addEventListener('click', function() {
socket.emit('short', socket.id);
socket.broadcast.emit('audio file', {
    audio: true,
    audioBuffer: buf2
});
});

socket.on('long', function(data) {
socket.broadcast.emit('audio file', {
    audio: true,
    audioBuffer: longbuf
});
console.log("Transmitting", socket.id);
});
socket.on('short', function(data) {
socket.broadcast.emit('audio file', {
    audio: true,
    audioBuffer: shortbuf
});
console.log("Transmitting", socket.id);
});
server.js

var express = require('express');
var socket = require('socket.io');
var fs = require('fs');
var app = express();
var server = app.listen(5000, function() {
console.log("Listening to requests on port 5000")
});

app.use(express.static('public'));

var io = socket(server);

io.on('connection', function(socket) {
console.log('New transmitter', socket.id);
fs.readFile(__dirname + '/public/sounds/trollism.wav', function(err, 
longbuf) {

    socket.on('long', function(data) {
        socket.broadcast.emit('long', data);
        console.log("Long press from " + socket.id);
        socket.broadcast.emit('audio file', {
            audio: true,
            audioBuffer: longbuf
        });

    });
});
    fs.readFile(__dirname + '/public/sounds/trollism2.wav', 
function(err, shortbuf) {

    socket.on('short', function(data) {
        socket.broadcast.emit('long', data);
        console.log("Short press from " + socket.id);
        socket.broadcast.emit('audio file', {
            audio: true,
            audioBuffer: shortbuf
        });

    });
});
});
谢谢你的帮助


编辑:决定按照jfriend00的路线,让客户端通过socket.emit()调用服务器。谢谢你的帮助

对于初学者来说,
socket.broadcast.emit()
不是客户端方法。这是服务器上可用的内容。客户端仅使用
socket.emit()
发送到服务器

客户端不直接向其他客户端发送消息-socket.io不是这样工作的。socket.io是从客户端到服务器的连接。虽然该方法可以在某些平台上工作并向服务器发送消息,但它没有文档记录,不应在任何客户端平台上使用

当您尝试使用未记录的
socket.broadcast.emit()
时,iOS实现可能不执行任何操作或存在某种内部错误。您应该改用
socket.emit()


如果您想将消息从客户端转发到其他客户端,您可以创建自己的消息,并将其发送到服务器进行该活动,然后当服务器接收到该消息时,服务器可以向其他客户端广播。

您确定这一切都可以在dektop浏览器上运行吗?@wrangler它完全可以在Chrome(Ubuntu桌面)上运行。我可以在Firefox(也是Ubuntu桌面)和Chrome mobile中获得音频输出,但按下按钮不会触发监听功能。iOS上的Safari根本不起作用。请尝试
console.log
内部事件侦听器,查看是否正在调用侦听器,如果未调用,则可能是由于html中的按钮Dom引起的问题如果调用,则我认为在侦听事件后不会发出消息。您需要诊断您的客户端代码是否获得正确的事件并执行预期的代码,或者这是否是纯客户端事件问题,而您没有获得客户端事件处理程序你想要的。然后,您需要在服务器中放置一组日志,以准确地查看它接收到的内容,从而跟踪您没有得到期望的内容的地方。这就是调试此类问题的方式。我们不能帮你。对不起,misclick。我决定按你的路线走,我让按钮通过socket.emit()调用服务器。谢谢