Есть рабочий код, который работает только локально у меня на ПК, использует budo как devDependencies и упаковывает app.js в bundle.js. Используются модули simple-peer и socket.io. Пытаюсьзадеплоить приложение, например на Хероку и оно не работает.
Насколько я понимаю, не работает именно из-за использования budo (который используют в продакшене). Догадываюсь что мне нужно заменить его webpack или browserify. Так? Или есть другие способы заставить приложение работать на удаленом сервере? Вот код:
app.js
navigator.webkitGetUserMedia({ video: true, audio: true }, function (stream) {
var Peer = require('simple-peer');
var peer = new Peer({
initiator: location.hash === '#init',
trickle: false,
stream: stream
});
peer.on('signal', function (data) {
document.getElementById('yourId').value = JSON.stringify(data)
})
document.getElementById('connect').addEventListener('click', function () {
var otherId = JSON.parse(document.getElementById('otherId').value)
peer.signal(otherId)
})
document.getElementById('send'). addEventListener('click', function () {
var yourMessage = document.getElementById('yourMessage').value
peer.send(yourMessage)
})
peer.on('data', function (data) {
document.getElementById('messages').textContent += data + '\n'
})
peer.on('stream', function (stream) {
var video = document.createElement('video')
document.body.appendChild(video)
video.src = window.URL.createObjectURL(stream)
video.play()
})
}, function (err) {
console.error(err)
})
server.js
var express = require('express');
var app = express();
var nunjucks = require('nunjucks');
var engines = require('consolidate');
// var io = require('socket.io').listen(app);
app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));
app.engine('html', engines.nunjucks);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');
io.sockets.on('connection', function (socket) {
function log() {
var array = [">>> "];
for(var i = 0; i < arguments.length; i++) {
array.push(arguments[i]);
}
socket.emit('log', array);
}
socket.on('message', function (message) {
log('Got message: ', message);
socket.broadcast.emit('message', message); // should be room only
});
socket.on('create or join', function (room) {
var numClients = io.sockets.clients(room).length;
log('Room ' + room + ' has ' + numClients + ' client(s)');
log('Request to create or join room', room);
if(numClients == 0) {
socket.join(room);
socket.emit('created', room);
}
else if(numClients == 1) {
io.sockets.in(room).emit('join', room);
socket.join(room);
socket.emit('joined', room);
}
else { // max two clients
socket.emit('full', room);
}
socket.emit('emit(): client ' + socket.id + ' joined room ' + room);
socket.broadcast.emit('broadcast(): client ' + socket.id + ' joined room ' + room);
});
});
app.get('/', function(req, res) {
res.render('index');
});
app.listen(app.get('port'), function() {
console.log('Node app is running on port', app.get('port'));
});