繁体   English   中英

Socket.io按钮侦听器不适用于移动设备

[英]Socket.io button listeners not working on mobile

我正在用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);
});

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()

如果要从客户端将消息中继到其他客户端,请创建自己的消息,然后将其发送到该活动的服务器,然后当服务器接收到该消息时,服务器便可以向其他客户端广播。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM