Я использую socket.io в Nodejs.Я создал систему видеочата.Мне нужно было использовать ssl, чтобы открыть камеру в Chrome.Я сделал интеграцию SSL.Работая без SSL, проект перестал работать с SSL.Функция "emit" через Socket.io потеряла свою функцию.Я общался как "socket.emit ('signal', ....". Он больше не работает. И "socket.on ('signal', ...." не слушает. Я не могу понять проблему.
server.js
var fs = require('fs'),
express = require('express.io'),
app = express(),
HTTPS_PORT = 443,
options = {
key: fs.readFileSync(__dirname + '\\key.key', 'utf8'),
cert: fs.readFileSync(__dirname + '\\cert.crt', 'utf8'),
ca: fs.readFileSync(__dirname + '\\ca.ca', 'utf8')
},
server = require('https').createServer(options, app),
io = require('socket.io')(server);
app.http().io();
app.use(express.static(__dirname + '/public'));
app.get('/', function (req, res) {
res.render('index.ejs');
});
app.get('/admin', function (req, res) {
res.render('admin.ejs');
});
app.io.route('signal', function (req) {
req.io.join(req.data);
app.io.room(req.data).broadcast('signal', {
user_type: req.data.user_type,
user_name: req.data.user_name,
user_data: req.data.user_data,
command: req.data.command
});
});
server.listen(HTTPS_PORT, function() {
console.log('server up and running at %s port', HTTPS_PORT);
});
webrtc.js
var socket = io.connect('https://siteadi.com:443', { secure: true }),
myName = "",
theirName = "",
myUserType = "",
configuration = {
'iceServers': [{
'url': 'stun:stun.l.google.com:19302'
}]
},
rtcPeerConn,
mainVideoArea = document.querySelector("#mainVideoTag"),
smallVideoArea = document.querySelector("#smallVideoTag"),
disconnected = [],
connected = [];
socket.on('disconnect', function (x) {
disconnected.push(x);
});
socket.on('connect', function (x) {
connected.push(x);
});
socket.on('signal', function (data) {
if (data.user_type == "doctor" && data.command == "joinroom") {
console.log("DOCTOR: JOIN");
}
else if (data.user_type == "doctor" && data.command == "reconnect") {
console.log("DOCTOR: RECONNECT");
}
else if (data.user_type == "patient" && data.command == "calldoctor") {
console.log("PATIENT: CALLING");
}
else if (data.user_type == "patient" && data.command == "joinroom") {
console.log("PATIENT: JOIN");
}
else if (data.user_type == 'signaling') {
console.log("try signaling");
if (!rtcPeerConn) startSignaling();
var message = JSON.parse(data.user_data);
if (message.sdp) {
rtcPeerConn.setRemoteDescription(new RTCSessionDescription(message.sdp), function () {
// if we received an offer, we need to answer
if (rtcPeerConn.remoteDescription.type == 'offer') {
rtcPeerConn.createAnswer(sendLocalDesc, logError);
}
}, logError);
}
else {
rtcPeerConn.addIceCandidate(new RTCIceCandidate(message.candidate));
}
}
});
function startSignaling() {
console.log("starting signaling...");
rtcPeerConn = new webkitRTCPeerConnection(configuration);
rtcPeerConn.onicecandidate = function (evt) {
if (evt.candidate)
socket.emit('signal', { "user_type": "signaling", "command": "icecandidate", "user_data": JSON.stringify({ 'candidate': evt.candidate }) });
console.log("completed sending an ice candidate...");
};
rtcPeerConn.onnegotiationneeded = function () {
console.log("on negotiation called");
rtcPeerConn.createOffer(sendLocalDesc, logError);
};
rtcPeerConn.onaddstream = function (evt) {
console.log("going to add their stream...");
mainVideoArea.srcObject = evt.stream;
};
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
navigator.getUserMedia({
'audio': false,
'video': true
}, function (stream) {
console.log("going to display my stream...");
smallVideoArea.srcObject = stream;
rtcPeerConn.addStream(stream);
}, logError);
}
function sendLocalDesc(desc) {
rtcPeerConn.setLocalDescription(desc, function () {
console.log("sending local description");
socket.emit('signal', { "user_type": "signaling", "command": "SDP", "user_data": JSON.stringify({ 'sdp': rtcPeerConn.localDescription }) });
}, logError);
}
function logError(error) {
}
app.js (пример кода)
socket.emit('signal', { "user_type": "patient", "user_name": "test", "user_data": "no data, just a patient", "command": "joinroom" });