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