Node.js 및 socket.io에 웹 응용 프로그램을 쓰고 있습니다. 사용자가 버튼을 클릭 한 다음 특정 동작 (이 경우 작은 음색 재생)을 수행 할 때 선택하는 몇 가지 버튼 리스너가 있습니다. 어떤 이유로 이러한 버튼은 Chrome/Chromium에서 완벽하게 작동하지만 Firefox 또는 모바일 브라우저에서는 작동하지 않습니다 (iOS의 Safari 및 Android의 Chrome에서 테스트했습니다). 어떤 도움Socket.io 버튼 리스너가 모바일에서 작동하지 않습니다.
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()을 통해 서버를 호출하도록 결정했습니다. 당신의 도움을 주셔서 감사합니다!
이 모든 것이 데스크톱 브라우저에서 제대로 작동합니까? – wrangler
@ 랭글러는 Chrome에서 완벽하게 작동합니다 (Ubuntu 데스크톱). Firefox (우분투 데스크톱) 및 Chrome 모바일에서 오디오 출력을 얻을 수 있지만 버튼을 누르면 수신 기능이 실행되지 않습니다. iOS의 Safari가 전혀 작동하지 않습니다. – javathunderman
이벤트 리스너 내에서'console.log'를 시도해보십시오. 리스너가 호출되지 않았는지 확인하십시오. 그러면 문제가 발생할 수 있습니다. 그러면 html의 Dom 폴더에서 호출됩니다. 그러면 이벤트가 수신 된 후에 메시지가 방출되지 않습니다. – wrangler