Socket.io pour application en temps réel

Donc, j'ai un autre projet que j'ai construit il y a quelques mois. Il utilise actuellement jquery avec ajax et fait un appel à un script php toutes les 30 secondes. Le script php interroge mysql et renvoie les résultats à l'écran. Dans cette application, la personne a la possibilité d'ajouter/modifier/supprimer des enregistrements à partir de la db et quand ils font la liste des résultats de la db doit mettre à jour la liste qu'ils voient. Jusqu'à présent, il semble faire le travail, mais en regardant vers le bas de la route la db va devenir plus grand et il aura besoin de être plus en temps réel, ce qui signifie non seulement rafraîchir toutes les 30 secondes, mais aussi instantanée que possible.

serait socket.c'est la réponse? Est-ce que j'utiliserais simplement socket.io avec nodejs pour créer un serveur et émettre des événements pour interroger ma base de données et retourner les résultats à l'affichage? Alors du côté client, vous avez juste une fonction qui appelle le script socket du serveur comme chaque seconde? Serait-ce le bon chemin pour utiliser socket?io? Si oui, y aurait-il un problème avec ce processus si je courais chaque seconde en ce qui concerne les ressources du serveur?

6
demandé sur John 2011-06-26 21:46:06

2 réponses

serait socket.c'est la réponse?

ma réponse est cette prise.io / noeud.js est bien meilleur pour traiter les applications en temps réel que PHP sous sa forme actuelle.

alors du côté du client juste avoir un fonction qui appelle la socket du serveur script comme chaque seconde?

Dans le nœud.js vous ne devriez pas sondage demander l'information, mais à la place, vous devriez faites pousser l'information(utilisez redis pubsub ou node.js événements pour que) vous. Je vous conseille de regarder un pubsub extrait de de moi sur stackoverflow.com pour m'expliquer un peu. Pour que le code fonctionne, vous devez installer socket.io 0.6.x (0.6.18) parce que le dernier socket.io 0.7.x a une API légèrement différente.

dans l'affirmative, y aurait-il Lieu de s'inquiéter: ce processus si je l'ai exécuté chaque seconde en ce qui concerne le serveur ressources?

comme je l'ai déjà dit, Utilisez la sémantique pubsub. Vous pouvez par exemple utiliser:

3
répondu Alfred 2017-05-23 10:28:54

serait socket.c'est la réponse? Est-ce que j'utiliserais simplement socket.io avec nodejs pour créer un serveur et émettre des événements pour interroger ma base de données et retourner les résultats à l'affichage? Alors du côté client, vous avez juste une fonction qui appelle le script socket du serveur comme chaque seconde? Serait-ce le bon chemin pour utiliser socket?io? Si oui, y aurait-il un problème avec ce processus si je l'exécutais chaque seconde en ce qui concerne les ressources du serveur?

si vous voulez quelque chose en temps réel. La structure pourrait être différente.

vous avez D'abord besoin d'un intermédiaire qui vous aide à communiquer entre le navigateur et le serveur.

Solution 1: Demande toutes les 30 secondes pour obtenir le temps réel (même que votre méthode actuelle)

Solution 2: HTTP Streaming. Une fois que la requête est faite au serveur. Le serveur peut continuer à envoyer la réponse au navigateur. En raison de nombreux problèmes de sécurité du navigateur, socket.io est né. Socket.io fournir de nombreux méthode streaming, htmlfile des flux,de la demande xhr,flash...

Deuxièmement, vous avez besoin de serveur pour accepter la connexion et faire un long service de sondage. Dieu merci ! socket.io a fait ce rôle pour toi.

Troisièmement, la personne la plus importante ! C'est des données.

Solution 1: chaque base de données request/trigger Call db ou nosql (SQLserver,mysql,Mongodb). Croyez-moi ! Votre db va mourir bientôt.

Solution 2: services de messagerie. Des Services comme Redis pub / sub, rabbitQ. Il utilise simplement s'abonner et publier le message dans la file d'attente. Il utilise le protocole particulier pour publier le message et ils ne stockent pas le message comme db. Ainsi, les its peuvent envoyer des messages > 100 K request / seconds ! Super rapide.Wow ! Est-il l'utilisation de ces services peut résoudre la solution en temps réel ? Malheureusement un peu dur. Pourquoi ? Parce que l'utilisation de ce genre de services, vous ne pouvez pas stocker des données, requête SQL pour personnaliser vos besoins en données.

Solution 3: processus en mémoire.Redis,memcache. La mémoire est super rapide! Vous pouvez stocker vos résultats finaux d'affichage dans la mémoire. La mémoire peut atteindre >100 k demande/secondes.

Conclusion. Pour construire une application web en temps réel comme facebook ou tweeter. Nous devons appliquer toutes les solutions ci-dessus + certains tricher. Exemple, notification d'ami facebook. Lorsque vous obtenez ami mise à jour de nouvelles, il utiliser des services de messagerie pour publier alerte à tous les amis (Max 5000 gens.)Parce que la publication lourde ralentira la performance des messages. Après ce cache (Memcached) le message de notification pour réduire l'appel db(mysql). Que diriez-vous nous pouvons obtenir un message de groupe avec plus d'un million de personnes ? Bien sûr, nous ne publions pas pour plus d'un million de personnes. Mais nous demandons à 1 million de personnes d'appeler nos derniers messages de groupe qui stockent dans la mémoire.

  • rappel : la mise à L'échelle de votre serveur est importante pour atteindre l'objectif en temps réel. Bonne chance !
2
répondu user717166 2011-07-07 15:19:25