PHP Socket.io server for WebRTC signaling.
Client: https://github.com/jsanahuja/peer-client
Demo: https://peer-demo.sowecms.com/
Clone both client and server and install dependencies.
git clone https://github.com/jsanahuja/php-peer-server.git
git clone https://github.com/jsanahuja/peer-client.git
cd php-peer-server
composer install
cd ../peer-client
npm install
npm run build
Create your server configuration file
cd ../php-peer-server
cp config.example.php config.php
Generate your Keychain private key:
php make_keychain.php
Result example: 1949e2278ea5767099e592ae8dd15677ecf851efd177a1f0fb1d44e8e79231f5
Place the result in the constant KEYCHAIN_PK defined in the config.php file we just created. Set also the absolute path to your CERT_CA and CERT_KEY files. You can play with the other constant values but it should be good to go. Note that if you want to change the PORT you will have to change it in the peer-client too.
Start the server as a daemon
php server.php start -d
Do not forget to open/whitelist the PORT or the server won't be accessible. For example with firewalld you would do:
firewall-cmd --zone=public --permanent --add-port=8999/tcp
firewall-cmd --reload
Note: The HTTP server should be pointing to the peer-client folder.
Here you can see a list of the available commands: https://github.com/walkor/Workerman#available-commands
The following is the list of events you can send to the server. For example socket.emit('join', 'a68ca609389b6ba7f0766b9ed1bfd8ca')
create(name, password)creates a room.
join(roomId, password)joins a room.
leave()leaves the current room.
kick(userId)kicks an user from the room. Can only be used by the creator.
ban(userId)bans an user from the room. Can only be used by the creator.
unban(userId)unbans an user from the room. Can only be used by the creator.
message(msg)sends a message to the current room.
toggle(resource)toggles a resource. The resources are 'video', 'microphone' and 'audio'.
candidate(callId, candidate)sends a candidate.
offer(callId, offer)sends an offer. Must have been requested with thecallevent.
answer(callId, answer)sends an answer. Must have been requested with theofferevent.
The following are the events the server will trigger.
created(roomId)confirms you created a room.
joined(roomId)confirms you joined the room.
left(roomId)confirms you left the room.
kickednotifies that you have been kicked from the room.
bannednotifies that you have been banned from the room.
unbannednotifies that you have been unbanned from a room.
call(callId)requests an offer for the call
offer(callId, offer)sends and offer and requires an answer
answer(callId, answer)sends an answer to the offer
hangup(callId)notifies that the call was closed
Also the error events:
join_alreadyinnotifies you can't join the room because you're already in.
join_wrongpassnotifies you can't join the room because the password provided is wrong.
join_fullnotifies you can't join the room because it is full.
join_bannednotifies you can't join the room because you are banned.
kick_noprivilegesnotifies you don't have enough privileges to kick in the current room.
kick_notinnotifies that the user you tried to kick is no longer in the room.
ban_noprivilegesnotifies you don't have enough privileges to ban in the current room.
ban_alreadynotifies that the user you tried to ban is already banned.
unban_noprivilegesnotifies you don't have enough privileges to unban in the current room.
unban_notbannednotifies you have tried to unban an user that wasn't banned.
And the room events:
r_message(userId, message)someone in your room sent a text message in your room.
r_resource(userId, resource, status)someone in your room toggled the status of one of its resources.
r_joined(userId)an user joined your room.
r_left(userId)an user left your room.
r_kicked(userId)an user was kicked out of your room.
r_banned(userId)an user from your room was banned.
r_unbanned(userId)an user has been unbanned.