Reputation: 373
I am working on a node project using socket.io but when a message is emitted it goes to the sender only and not to other connected clients. please what could I be doing wrong?
this my socket server and client code below.
node - index.js
...
io.on("connection", (socket) => {
//When a new user join
socket.on("joined", (data) => {
socket.emit("welcome", "Welcome to test");
});
//on send
socket.on("send_message", (data) => {
const {name, message} = data;
socket.emit("recieve_message", {name, message});
});
});
...
client - socket.html
...
<body>
<form action="">
<input id="name" autocomplete="off" />
<input id="message" autocomplete="off" /><button>Send</button>
</form>
<ul id="messages"></ul>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.0/socket.io.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script>
<script>
var socket = io.connect('http://localhost:3005');
$('form').submit(function () {
socket.emit('send_message', {name: $('#name').val(), message: $('#message').val()});
$('#message').val('');
return false;
});
socket.emit('joined');
socket.on('welcome', function (msg) {
$('#messages').append($('<li>').text(msg));
});
socket.on('recieve_message', function (msg) {
$('#messages').append($('<li>').text(`${msg.name} - ${msg.message}`));
});
</script>
</body>
...
Upvotes: 0
Views: 23
Reputation: 338
To send to everyone in the channel use
socket.broadcast.emit()
this will broadcast the message.
Use this cheatsheet for reference next time.
https://socket.io/docs/emit-cheatsheet/
Upvotes: 1