I have a problem in understanding the concept of sending socket.io events from Sails.js client side controller and handling them in server-side controllers. First of all, I have
Be sure to read the SailsJS v0.11 Migration Guide before using onConnect. This has now been deprecated.
If all you're trying to do is run a Sails controller action via sockets, then you don't need to emit
anything at all. Part of Sails' charm is that it can route regular, HTTP-style requests over sockets. So if you have a controller /api/controllers/FooController.js
like:
module.exports = {
bar: function (req, res) {
// Note, you can check whether this was a socket request
// with req.isSocket, and if so access the connecting
// socket with req.socket
res.json({"message": "Hello!"});
}
}
and you include the bundled sails.io.js
file in your client-side app, then you can access that action via:
socket.get('/foo/bar', function(data) {
// data will contain {message:"hello"}
}
Note: if you're using the newer version of sails.io.js
that is included with Sails v0.10.x, it's io.socket.get
.
If you really want to catch socket events on the server, the best place to register them is in your /config/socket.js
file, in the onConnect
method:
onConnect: function (socket, session) {
socket.on('some_event', function(data) {
// handle event here
});
}
This is better than putting the event handlers in a controller, because any time that controller action ran it would bind the event again, and you'd see the callback being run multiple times.