dhat
@dhat

Как задеплоить свой видео чат WebRTC?

Есть рабочий код, который работает только локально у меня на ПК, использует 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'));
});
  • Вопрос задан
  • 313 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы