Skip to content

Instantly share code, notes, and snippets.

@Globik
Created May 1, 2017 15:27
Show Gist options
  • Select an option

  • Save Globik/5a63e8683ab1d1c2c72fd25a798ae2d8 to your computer and use it in GitHub Desktop.

Select an option

Save Globik/5a63e8683ab1d1c2c72fd25a798ae2d8 to your computer and use it in GitHub Desktop.
Websocket multi room based on ws.js
<html>
<body>
<h4>websocket</h4>
<h5>Group: <span id="group">darwin</span></h5>
<!-- a hardoced group name -->
<button onclick="bjoin();">join group</button><br>
<input id="text" type="text"/>
<span id="out"></span>
<script>
var group=document.getElementById("group").textContent;
var ws=new WebSocket('ws://localhost:5000');
ws.onerror=function(e){out.innerHTML=e;}
ws.onclose=function(e){out.innerHTML='closed'+e;}
ws.onopen=function(){
out.innerHTML='connected ';
}
ws.onmessage=function(ms){out.innerHTML+=ms.data+'<br>';}
function send(msg){
ws.send(JSON.stringify({msg:msg}));
}
function broadcast(msg,room){
ws.send(JSON.stringify({room:room,msg:msg}))
}
function join(room){
ws.send(JSON.stringify({join:room}));
}
function bjoin(){
//alert(group);
join(group);
}
text.onchange=function(el){
//alert(el.target.value);
broadcast(el.target.value,group);
}
</script>
</body>
</html>
const WebSocket = require('ws');
const http=require('http');
const express = require('express');
const app = express();
app.use(express.static('public'));
const bserver=http.createServer(app);
const webPort = 5000;
bserver.listen(webPort, function(){
console.log('Web server start. http://localhost:' + webPort );
});
const wss=new WebSocket.Server({server:bserver});
wss.on('connection',ws=>{
ws.room=[];
ws.send(JSON.stringify({msg:"user joined"}));
console.log('connected');
ws.on('message', message=>{
console.log('message: ',message);
//try{
var messag=JSON.parse(message);
//}catch(e){console.log(e)}
if(messag.join){ws.room.push(messag.join)}
if(messag.room){broadcast(message);}
if(messag.msg){console.log('message: ',messag.msg)}
})
ws.on('error',e=>console.log(e))
ws.on('close',(e)=>console.log('websocket closed'+e))
})
function broadcast(message){
wss.clients.forEach(client=>{
if(client.room.indexOf(JSON.parse(message).room)>-1){
client.send(message)
}
})
}
@ragokan
Copy link
Copy Markdown

ragokan commented Mar 3, 2021

Thank you, this method give me some tactics and flexibility.

@megalois
Copy link
Copy Markdown

megalois commented Mar 4, 2021

Very interesting. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment