socket.io over node.js for webrtc-signaling!
=
npm install socketio-over-nodejs
and run the signaler.js nodejs file:
// run simple HTTP server
node ./node_modules/socketio-over-nodejs/signaler.js
// run HTTPs server
node ./node_modules/socketio-over-nodejs/signaler-ssl.js
Now you can test: http://localhost:8888/ or https://localhost:8888/
You can use ip-address 127.1.1 on Mac/Linux instead of localhost.
=
# create a directory
mkdir socketio-over-nodejs
# open directory
cd socketio-over-nodejs
# get package
wget http://cdn.webrtc-experiment.com/packages/socketio-over-nodejs.tar
# extract package
tar -xf socketio-over-nodejs.tar
# run simple node.js server
node signaler.js
# run HTTPs server
node signaler-ssl.js
Now, you can open port 8888 on your ip address/domain; or otherwise on localhost: http://localhost:8888/
=
It is using port 8888; you can edit this port using following commands:
vi signaler.js
# now edit port 8888
# and save changes & quit
# press "insert" key; then press "Esc" key and the type
:wq
:wq command saves changes in the file and exits editing mode. If you don't want to save changes; simply type:
# if you don't want to save changes however want to exit editing mode
:q
Common Error: Error: listen EADDRINUSE. It means that same port is used by another application. You can close all existing processes running on same port:
// list all active processes running on same port
fuser -v 8888/tcp
// kill all processes running on port "8888"
fuser -vk 8888/tcp
// list again to verify closing ports
fuser -v 8888/tcp
You can delete "directory" and re-install:
rm -rf socketio-over-nodejs
mkdir socketio-over-nodejs
# and following above steps to "wget" and "tar" then "node" to run!
=
- https://www.webrtc-experiment.com/docs/WebRTC-Signaling-Concepts.html
- http://www.RTCMultiConnection.org/FAQ/
- http://www.RTCMultiConnection.org/docs/sessionid/
- http://www.RTCMultiConnection.org/docs/channel-id/
=
Otherwise, follow these steps:
- Download and extract ZIP file of this repository then copy
folder-locationof thesignaler.jsfile - Open Node.js command prompt window
- Type command
cd folder-locationwherefolder-locationcan beC:\socketio-over-nodejs - Type
npm install expressor download ZIP - Type
npm install socket.ioor download ZIP - Type
node signalerto run the node.js server
Then open http://localhost:8888/.
=
- Create an account at
nodejitsu - Use same Node.js command prompt window
- Type
jitsu deploy
and you're done!
Remember: jitsu deploy command will deploy the entire directory containing all all files including node_modules (i.e. dependencies).
=
In ui.js files you can find openSocket method; or in all libraries; you can find openSignalingChannel method.
// http://socketio-over-nodejs.hp.af.cm/
// http://socketio-over-nodejs.jit.su:80/
// http://webrtc-signaling.jit.su:80/
var SIGNALING_SERVER = 'https://webrtc-signaling.nodejitsu.com:443/';
connection.openSignalingChannel = function(config) {
var channel = config.channel || this.channel || 'default-namespace';
var sender = Math.round(Math.random() * 9999999999) + 9999999999;
io.connect(SIGNALING_SERVER).emit('new-channel', {
channel: channel,
sender : sender
});
var socket = io.connect(SIGNALING_SERVER + channel);
socket.channel = channel;
socket.on('connect', function () {
if (config.callback) config.callback(socket);
});
socket.send = function (message) {
socket.emit('message', {
sender: sender,
data : message
});
};
socket.on('message', config.onmessage);
};io.connect(URL).emit('new-channel') starts a new namespace that is used privately or publicly to transmit/exchange appropriate stuff e.g. room-details, participation-requests, SDP, ICE, etc.
=
var config = {
openSocket: function (config) {
// http://socketio-over-nodejs.hp.af.cm/
// http://socketio-over-nodejs.nodejitsu.com:80/
// http://webrtc-signaling.nodejitsu.com:80/
var SIGNALING_SERVER = 'https://webrtc-signaling.nodejitsu.com:443/';
config.channel = config.channel || location.href.replace(/\/|:|#|%|\.|\[|\]/g, '');
var sender = Math.round(Math.random() * 999999999) + 999999999;
io.connect(SIGNALING_SERVER).emit('new-channel', {
channel: config.channel,
sender: sender
});
var socket = io.connect(SIGNALING_SERVER + config.channel);
socket.channel = config.channel;
socket.on('connect', function () {
if (config.callback) config.callback(socket);
});
socket.send = function (message) {
socket.emit('message', {
sender: sender,
data: message
});
};
socket.on('message', config.onmessage);
}
};=
You can detect presence of a room like this:
// http://socketio-over-nodejs.hp.af.cm/
// http://socketio-over-nodejs.jit.su:80/
// http://webrtc-signaling.jit.su:80/
var SIGNALING_SERVER = 'https://webrtc-signaling.nodejitsu.com:443/';
function testChannelPresence(channel) {
var socket = io.connect(SIGNALING_SERVER);
socket.on('presence', function (isChannelPresent) {
console.log('is channel present', isChannelPresent);
if (!isChannelPresent) startNewSession();
});
socket.emit('presence', channel);
}
// test whether default channel already created or not!
testChannelPresence('default-channel');=
Using this command; you can open project's directory (i.e. folder).
=
This command runs node.js server via signaler.js file. That file handles socket.io relevant stuff.
=
This command deploys the entire directory (i.e. project, including all node_modules dependencies) over nodejitsu servers. You will be able to access your deployed project using URL like this:
https://username.nodejitsu.com/See the demo URL: https://webrtc-signaling.nodejitsu.com/
=
Each experiment is using something like this:
var SIGNALING_SERVER = '/';This is the URL of your site. By default it will be equal to http://localhost:8888/.
It is strongly recommended to use absolute URL including port number:
var SIGNALING_SERVER = 'http://domain.com:8888/';=
- To run socket.io on your computer; you need to download
node.jssoftware fromnodejs.org. - If you're using windows; in the
Start Menus; you can typenodein the search-box.Node.js command promptwill be listed on the top. - You can use same command prompt to run any
node.jsfile; also you can writenodejitsucommands in the same place e.g.jitsu deployorjitsu loginetc. - Default port
8888is used for this experiment. You can manually open this URL:http://localhost:8888/
=
Interested to understand WebRTC Signaling Concepts? Read this document.
=
=
Socket.io over Node.js is released under MIT licence . Copyright (c) Muaz Khan.