2014-05-07 4 views
2

Existe-t-il un moyen dans sails.js ou un didacticiel qui pourrait m'aider à créer un chat peer to peer, utilisant des sockets, quelque chose comme pubnub. J'essaye d'implémenter une fonction de chat personnalisée en utilisant sails.js Ce qui veut dire que j'ai plusieurs utilisateurs dans mon application et qu'un utilisateur peut discuter avec un autre utilisateur. Donc, si l'utilisateur A envoie un message dans l'utilisateur B chat, B (seulement) reçoit et vice-versa.Conversation personnalisée avec Sails.js

Je suis passé par http://sailsjs.org/#!documentation/sockets, la documentation par exemple donne des exemples en utilisant les modèles. Donc, je suppose que ce n'est pas pour une discussion en tête-à-tête, mais pour quelque chose comme la liste d'utilisateurs et le profil de l'utilisateur change de genre de choses.

Donc, je sais que j'ai besoin d'utiliser le code socket.io natif pour cela. Ce dont j'ai besoin, c'est que le client puisse ouvrir une socket pour un canal particulier, et chaque fois que l'utilisateur A tape dans l'utilisateur B, ce message est stocké dans la base de données, ainsi que sur le socket. Je ne sais pas comment obtenir cette fonctionnalité dans Sails.

Je peux écrire le code dans l'événement index du MessagesController. J'ai donc besoin de calculer le nom de la chaîne en fonction des détails de l'utilisateur A et de l'utilisateur B et de l'écrire sur le socket pour ce canal. Mais je ne sais pas comment l'écrire sur le socket pour ce canal particulier. J'espère que je suis clair avec ce que je veux. J'ai trouvé ce morceau de code comme exemple:

//Code For Server 
var io = require("socket.io"); 
io.sockets.on("connection", function (sock) { 
    sock.emit("welcomeMessage", { hello: "world" }); 
} 
io.listen(80); 

//Code For Client 
var sock = io.connect('http://localhost'); 
sock.on('welcomeMessage', function (json) { 
    //Handle Event Received 
}); 

Mais il ne me dit pas, comment puis-je écrire sur cette prise particulière pour le canal « welcomeMessage » de tout contrôleur que je veux. Quelque chose comme ce que supporte PubNub (http://www.pubnub.com/).

+0

J'ai trouvé l'approche suivante, mais elle n'a pas l'air trop propre, aussi c'est purement basé sur socket.io –

Répondre

4

Vous pouvez définitivement faire du chat peer-to-peer et de groupe dans Sails en utilisant les méthodes pubsub basées sur un modèle. C'est beaucoup plus facile dans Sails v0.10 (npm install [email protected]), et il y a un exemple complet à http://github.com/balderdashy/sailsChat. Docs for Sails v0.10 sont here.

L'astuce en utilisant v0.10 est d'utiliser une combinaison de subscription contexts et l'événement message de sorte que seul l'utilisateur se sont abonnés à leur propre contexte message, mais ils sont abonnés aux contextes update de tout le monde qu'ils sont dans une salle de discussion avec. De cette façon, ils reçoivent seulement leurs propres messages directs, mais ils entendent des mises à jour (c'est-à-dire des changements de nom et d'état) à leurs amis.

Pour envoyer un message direct à une instance User dans un contrôleur:

User.message(userInstance, msgData); 

Tout socket client souscrit au contexte message de cette instance recevra un événement user avec l'objet de données suivantes:

{ 
    id: [the user ID], 
    verb: "messaged", 
    data: [the data in msgData] 
} 

Si vous le souhaitez, vous pouvez également utiliser low-level Sails Socket methods comme join, leave, broadcast et emit pour faire un serveur de discussion plus ad-hoc, mais le faire de la manière Voiles vous permet d'utiliser la puissance du cadre à votre avantage!

+0

Salut, Est-il conseillé d'utiliser la version bêta pour une application de production? –

+0

Quand la version bêta sortira-t-elle avec une version officielle? –

+0

Les liens sont rompus. – theblang