I have an app like this following:
io.of('/hello').on('connection', function(socket) {
socket.emit('world', {});
});
app.post('/', function *(next) {
console.log("At here......");
var pushMessage = (yield parse.json(this));
console.log(pushMessage);
if(flag !== 0) {
// io.of('/hello/').emit('world', pushMessage);
io.sockets.emit('world', pushMessage);
} else {
console.log("Do Nothing");
}
});
It receive a http request and emit an event. When I use io.sockets.emit it works well but when I specify a namespace with 'io.of('hello').emit' it doesn't work,why?
My client side is this:
var socket = io.connect('http://localhost:3000', {
'reconnection delay': 100,
'reconnection limit': 100,
'max reconnection attempts': 10
});
//server side use io.sockets.emit
socket.on('world', function(data) {
alert(data.a);
});
//if server side use io.of('/hello/').emit
//socket.of('/hello/').on('world', function(data) {
// alert(data.a);
//});
Your code is more or less fine, but you are on different namespaces.
io.sockets.emit()
broadcasts to everybody currently connected to your server via socket. That's the reason it works. Technically it's because that's a 'shortcut' forio.of('').emit()
(''
being the namespace).Assuming you're going to use the
/hello
namespace, this is what you have to do on your client:on the server you first have to listen for connections on that namespace:
then:
You may want to look at these: socket.io: How to use and socket.io rooms on GitHub
### UPDATE ###
I conducted a little test:
client:
server:
... and it worked. I copied the jquery-ajax code from here.