#javascript #vue.js
#javascript #vue.js
Вопрос:
Я использую Vue для создания веб-приложения. Прямо сейчас у меня есть этот код, в котором есть кнопка, при нажатии на которую воспроизводится звук, и это работает.
<template>
<div id="app" class="container-fluid">
<audio id="audio1">
<source src="../assets/mySong.wav" type="audio/wav">
</audio>
<button @click="playSound()" >Press for Sound</button>
</template>
<script>
playSound() {
var myMusic = document.getElementById("audio1");
myMusic.play();
</script>
Но это работает только для текущего пользователя, посещающего эту страницу. Если у меня есть другой пользователь, который также просматривает эту веб-страницу, он не может ее услышать. Что мне нужно сделать, чтобы, если у меня есть 2 пользователя, которые просматривают одну и ту же страницу в своем браузере, и один из них нажимает кнопку, другой человек может это услышать?
Комментарии:
1. Это код на стороне клиента.. Таким образом, каждому клиенту предоставляется его собственная копия этого кода. Действие одного клиента не окажет никакого влияния на другого клиента без какой-либо серверной стороны, чтобы это произошло, или даже оркестровки, чтобы что-то произошло и для кого-то еще
2. @austinwernli О, хорошо, спасибо. Итак, что я могу сделать, так это то, что на моем серверном сервере мне нужно было бы иметь клавишу, чтобы отслеживать, была нажата кнопка или нет?
Ответ №1:
Вам нужно использовать сокеты в javascript для связи в реальном времени с серверной частью, и серверная часть отправит это сообщение другому клиенту для воспроизведения звука тоже. например:
var http = require('http');
var fs = require('fs');
// Loading the index file . html displayed to the client
var server = http.createServer(function(req, res) {
fs.readFile('./index.html', 'utf-8', function(error, content) {
res.writeHead(200, {"Content-Type": "text/html"});
res.end(content);
});
});
// Loading socket.io
var io = require('socket.io').listen(server);
// When a client connects, we note it in the console
io.sockets.on('connection', function (socket) {
console.log('A client is connected!');
socket.on('playAudio', function (someAudio) {
socket.broadcast.emit('playAudio');
});
});
server.listen(8080);
во внешнем интерфейсе:
<template>
<div id="app" class="container-fluid">
<audio id="audio1">
<source src="../assets/mySong.wav" type="audio/wav">
</audio>
<button @click="playSound()" >Press for Sound</button>
</template>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!',
isPlaying: false
},
created: {
var socket = io.connect('http://localhost:8080');
socket.on('message', (message) => {
alert('The server has a message for you: ' message);
})
socket.on('playAudio', () => {
if(!this.isPlaying){
this.playAudio();
}
})
},
methods: {
playAudio() {
socket.emit('playAudio');
var myMusic = document.getElementById("audio1");
this.isPlaying = true;
myMusic.play();
}
}
})
</script>
подробнее в:
https://openclassrooms.com/en/courses/2504541-ultra-fast-applications-using-node-js/2505653-socket-io-let-s-go-to-real-time
https://itnext.io/building-a-node-js-websocket-chat-app-with-socket-io-and-react-473a0686d1e1