- WebRTC Cookbook
- Andrii Sergiienko
- 474字
- 2021-07-23 20:27:08
Implementing a chat using a signaling server
In this recipe, we will cover the process of implementing private, peer-to-peer web chat using signaling server as the middle point. Peers will send chat messages via the signaling server. In the schema represented in the following diagram, you can see the flow:

How to do it…
To implement the chat feature via the signaling server, we need to add some methods to the client code with the following steps:
- We need to add appropriate code to the function that processes the messages from the signaling server:
function processSignalingMessage(message) { var msg = JSON.parse(message); if (msg.type === 'CHATMSG') { onChatMsgReceived(msg.value); } else if (msg.type === 'offer') { pc.setRemoteDescription(new RTCSessionDescription(msg)); doAnswer(); } else if (msg.type === 'answer') { pc.setRemoteDescription(new RTCSessionDescription(msg)); } else if (msg.type === 'candidate') { var candidate = new RTCIceCandidate({sdpMLineIndex:msg.label, candidate:msg.candidate}); pc.addIceCandidate(candidate); } else if (msg.type === 'GETROOM') { room = msg.value; onRoomReceived(room); } else if (msg.type === 'WRONGROOM') { window.location.href = "/"; } };
- We will check whether the received message is of the
CHATMSG
type and if so, we will call theonChatMsgReceived
method to process it:function onChatMsgReceived(txt) { var chatArea = document.getElementById("chat_div"); chatArea.innerHTML = chatArea.innerHTML + txt; chatArea.scrollTop = chatArea.scrollHeight; };
Here, we will get the
chat_div
element by its ID and alter its content by adding the chat message received from the remote peer via the signaling server. - To send a chat message, we should implement a method like the following:
function chatSendMessage(msg) { if (!channelReady) return; sendMessage({"type" : "CHATMSG", "value" : msg}); };
This function checks whether the WebSocket channel is up and sends a chat message to the signaling server using the channel. To use this function, we can use the HTML input tag with the
submit
button and call it on thesubmit
event.
How it works…
The basic principle of this solution is pretty simple:
- One peer sends a text message to the signaling server, marking it as the
CHATMSG
type - The signaling server retransmits the message to another peer
- Another peer gets the message from the signaling server, checks whether it is of the
CHATMSG
type and if so, shows it to the user
There's more…
This way of implementing web chat is usually not secure because the data will go via the signaling server and not directly through the peers. Nevertheless, it is suitable for public chat rooms where there can be several people at a time. For private peer-to-peer chats, it is usually better to use WebRTC data channels, and that way it is more secure.
See also
- To implement the chat feature using data channels, follow the Implementing a chat using data channels recipe
- Mastering Ext JS(Second Edition)
- DBA攻堅指南:左手Oracle,右手MySQL
- AngularJS入門與進階
- Building Modern Web Applications Using Angular
- 小創客玩轉圖形化編程
- Unity 2020 Mobile Game Development
- Access 2010數據庫基礎與應用項目式教程(第3版)
- Access 2016數據庫管
- 琢石成器:Windows環境下32位匯編語言程序設計
- 自然語言處理Python進階
- Jupyter數據科學實戰
- Web Development with MongoDB and Node(Third Edition)
- Cybersecurity Attacks:Red Team Strategies
- FFmpeg開發實戰:從零基礎到短視頻上線
- scikit-learn Cookbook(Second Edition)