Voorwoord
Voor het communiceren met klanten maken we gebruik van Skype, alleen moet de klant dan wel Skype geinstalleerd hebben. We waren op zoek naar een webbased chattool zonder het installeren van plug-ins. WebRTC, WEB Real Time Communication maakt het mogelijk om via de webbrowser peer-to-peer te videochatten. Chrome, Firefox en Opera hebben hier al ondersteuning voor, de rest van de browsers zal naar onze mening niet achterblijven en snel volgen.
Wij maken gebruik van de relatief makkelijke EasyRTC, (what’s in the name).
EasyRTC draait op Node.js en heeft een aantal demo’s om mee te beginnen.
Wij gaan EasyRTC gebruiken met ssl op poort 8443.
Om Nat en firewalls te omzeilen maakt WebRTC gebruik van het ICE protocol om Stun en/of Turn servers te benaderen
- Stun (Session Traversal Utilities for NAT) server wordt gebruikt om het publieke ip-adres te achterhalen.
- Turn (Traversal_Using_Relays_around_NAT) servers worden gebruikt om het verkeer door de server te laten afhandel mocht de peer to peer verbinding falen.
In dit voorbeeld gebruik ik de public servers van Google. Het is mogelijk om een eigen Stun/Turn server te installeren
Onderstaande installatie voeren we uit onder de user "test", EasyRT zal ook opstarten als user "test":
Installeer Node.js
Open een Terminal voer de volgende commando’s uit:
sudo yum -y update
sudo yum -y groupinstall "Developer Tools"
cd /usr/src
wget http://nodejs.org/dist/v0.10.17/node-v0.10.17.tar.gz
tar zxf node-v0.10.17.tar.gz
cd node-v0.10.17
./configure
sudo make
sudo make install
cd /usr/local/lib/node_modules/npm
sudo npm install
Download EasyRTC en pak het zip-bestand uit
Download EasyRTC bijv onder /usr/local
Pak de bestanden uit in de map easyrtc
unzip easyrtc_server_example.zip -d easyrtc
Configureer EasyRTC met HTTPS
De Standaard EasyRTC configuratie staat onder /usr/local/easyrtc/server.js en gebruikt http op poort 8080. In onze configuratie maken wij gebruik van https op poort 8443:
// Load required modules
var https = require("https"); // https server core module
var fs = require("fs"); // file system core module
var express = require("express"); // web framework external module
var io = require("socket.io"); // web socket external module
var easyrtc = require("easyrtc"); // EasyRTC external module
// Setup and configure Express http server. Expect a subfolder called "static" to be the web root.
var httpApp = express();
httpApp.use(express.static(__dirname + "/static/"));
// Start https server op poort 8443 met de private key en het certificaat onder
// /usr/local/easyrtc_cert/
var webServer = https.createServer(
{
key: fs.readFileSync("/usr/local/easyrtc_cert/easyrtc.key"),
cert: fs.readFileSync("/usr/local/easyrtc_cert/easyrtc.crt")
},
httpApp).listen(8443);
// Start Socket.io so it attaches itself to Express server
var socketServer = io.listen(webServer, {"log level":1});
// Start EasyRTC server
var rtc = easyrtc.listen(httpApp, socketServer);
// Stun en Turn servers om NAT en firewalls te omzeilen
var myIceServers = [
{ "url":"stun:stun.l.google.com:19302"},
{
"url":"turn:192.158.29.39:3478?transport=udp",
"username":"28224511:1379330808",
"credential":"JZEOEt2V3Qb0y27GRntt2u2PAYA="
},
{
"url":"turn:192.158.29.39:3478?transport=tcp",
"username":"28224511:1379330808",
"credential":"JZEOEt2V3Qb0y27GRntt2u2PAYA="
}
];
EasyRTC opstarten
Start de server handmatig op door het volgende commando uit te voeren
sudo node server.js
Browse dan naar de server bijv. https://easyrtc.netcare.nl:8443/demos
Hier staan een aantal demos met bijbehorende code om in je eigen webserver te implementeren.
Maak een Init script aan voor EasyRTC:
vi /etc/init.d/easyrtc
En plak onderstaande code erin
#!/bin/sh
#
# chkconfig: 35 99 99
# Node staat in de map /usr/local/bin/node
# EasyRTC staat in de /usr/local/ easyrtc
#
. /etc/rc.d/init.d/functions
USER="test"
DAEMON="/usr/local/bin/node"
ROOT_DIR="/usr/local/easyrtc"
SERVER="$ROOT_DIR/server.js"
LOG_FILE="$ROOT_DIR/server.js.log"
LOCK_FILE="/var/lock/subsys/node-server"
do_start()
{
if [ ! -f "$LOCK_FILE" ] ; then
echo -n $"Starting $SERVER: "
runuser -l "$USER" -c "$DAEMON $SERVER >> $LOG_FILE &" && echo_success || echo_failure
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $LOCK_FILE
else
echo "$SERVER is locked."
RETVAL=1
fi
}
do_stop()
{
echo -n $"Stopping $SERVER: "
pid=`ps -aefw | grep "$DAEMON $SERVER" | grep -v " grep " | awk '{print $2}'`
kill -9 $pid > /dev/null 2>&1 && echo_success || echo_failure
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f $LOCK_FILE
}
case "$1" in
start)
do_start
;;
stop)
do_stop
;;
restart)
do_stop
do_start
;;
*)
echo "Usage: $0 {start|stop|restart}"
RETVAL=1
esac
exit $RETVAL
Maak het script uitvoerbaar en laat het automatisch opstarten
chmod a+x /etc/init.d/easyrtc
chkconfig easyrtc on