Я пытаюсь реализовать видеочат, используя WebRT C.
Веб-приложение размещено на heroku и использует node.js.
Я использовал это как ссылка.
Я думаю, что мой socket.io (v1) не работает, потому что очень простой emit
уже выходит из строя
room = prompt('Enter room name:');
const socket = io.connect();
if (room !== '') {
console.log('Joining room ' + room);
socket.emit('create or join', room);
}
Это то, что я вижу в консоли:
Код на стороне сервера выглядит следующим образом:
const static = require('node-static');
const http = require('http');
const file = new(static.Server)();
const app = http.createServer(function (req, res) {
file.serve(req, res);
}).listen(process.env.PORT || 2013);
const io = require('socket.io').listen(app);
io.sockets.on('connection', (socket) => {
// convenience function to log server messages to the client
function log(){
const array = ['>>> Message from server: '];
for (const i = 0; i < arguments.length; i++) {
array.push(arguments[i]);
}
socket.emit('log', array);
}
socket.on('message', (message) => {
log('Got message:', message);
// for a real app, would be room only (not broadcast)
socket.broadcast.emit('message', message);
});
socket.on('create or join', (room) => {
const 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);
});
});
Это просто скопировать / вставить из примера Google.
Используется для запуска сервера узлов в Procfile heroku.
EDIT
В логах heroku я нашел:
/app/node_modules/socket.io-adapter/index.js:196
2020-04-03T10:20:11.034394+00:00 app[web.1]: if (fn) process.nextTick(fn.bind(null, null, sids));
2020-04-03T10:20:11.034395+00:00 app[web.1]: ^
2020-04-03T10:20:11.034395+00:00 app[web.1]:
2020-04-03T10:20:11.034396+00:00 app[web.1]: TypeError: fn.bind is not a function
2020-04-03T10:20:11.034396+00:00 app[web.1]: at Adapter.clients (/app/node_modules/socket.io-adapter/index.js:196:31)
2020-04-03T10:20:11.034396+00:00 app[web.1]: at Namespace.clients (/app/node_modules/socket.io/lib/namespace.js:256:16)
2020-04-03T10:20:11.034397+00:00 app[web.1]: at Socket.<anonymous> (/app/index.js:102:35)
2020-04-03T10:20:11.034397+00:00 app[web.1]: at Socket.emit (events.js:311:20)
2020-04-03T10:20:11.034397+00:00 app[web.1]: at /app/node_modules/socket.io/lib/socket.js:503:12
2020-04-03T10:20:11.034398+00:00 app[web.1]: at processTicksAndRejections (internal/process/task_queues.js:79:11)
Возможно, это вещь версии. Примеры могут быть для Socket.IO 2, но я должен использовать Socket.IO 1. Сейчас исследую это.