gpt4 book ai didi

javascript - Socket.io 按钮监听器无法在移动设备上工作

转载 作者:行者123 更新时间:2023-12-03 03:10:04 24 4
gpt4 key购买 nike

我正在使用 Node.js 和 socket.io 编写一个 Web 应用程序。我有几个按钮监听器,它们在用户单击按钮时进行拾取,然后执行特定操作(在本例中为播放小音调)。由于某些原因,这些按钮在 Chrome/Chromium 中工作得很好,但在 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);
});

服务器.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() 来代替。

如果您想从客户端将消息中继到其他客户端,您可以创建自己的消息,并将其发送到该事件的服务器,然后当服务器收到该消息时,服务器可以广播到其他客户端。

关于javascript - Socket.io 按钮监听器无法在移动设备上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46991661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com