2010-07-15 2 views
1

J'essaye de construire un serveur qui gérera de nombreuses connexions simultanées aux clients iPhone sans multi-threading. Je vais envoyer des messages à tous les clients environ toutes les 10-30 secondes, mais la plupart des messages seront identiques ou très similaires et faciles à trier. Compte tenu de la configuration de la haute simultanéité mais un faible besoin de tri des données, j'essaie de trouver la meilleure solution pour la configuration de mon serveur. J'ai regardé des paquets pilotés par les événements tels que EventMachine, Twisted, node.js, etc. Il semble que Twisted et EventMachine sont fondamentalement un toss-up, et le nœud est probablement plus rapide mais pas tout à fait prêt pour le plein développement. Cela me conduit à quelques questions:Comment faire pour le meilleur serveur> 10.000 clients iPhone à partir du serveur (pas serveur web)

  1. est le nœud inapte pour le développement critique simplement parce qu'il est des API font défaut et il est pas complètement vidées? Ou pourrait-il y avoir des bugs qui feront de mon développement un enfer?

  2. J'envisage d'écrire le code en C, car il y aura très peu d'E/S disque et la plus grande partie devrait être facilement mise en cache. Si c'est le cas, il me semble que je devrais utiliser des sockets UDP non bloquantes et gérer l'ACKing moi-même. J'ai regardé poll(), select(), epoll(), mais j'ai du mal à déterminer lequel est le meilleur et comment les invoquer exactement. Des pensées? Si j'utilise Twisted ou EventMachine (existe-t-il une différence autre que la langue? Je ne sais pas encore, donc je suis une table vide), devrais-je essayer TCP ou UDP? Est-ce que ces langues pouvaient gérer l'envoi de 1 Ko à 10 000 clients en moins d'une seconde?

Je serais reconnaissant toute perspicacité/suggestions, en ce moment je tourne mes roues follement autour trop de blogs et documentations, et ne pas l'arrière-plan de programmation pour trier (au moins avec un bon sens la gauche).

Merci! Mike

Répondre

3

Je vous suggère de développer votre serveur en C sur Mac OS X Snow Leopard, en utilisant kqueue() et kevent() ou kevent64() pour multiplexer les connexions client entrantes. Jetez un coup d'œil sur le code source des serveurs IRC disponible gratuitement. Ces serveurs gèrent même plus de 10K clients simultanément.

Commencez à lire this page. Même si c'est un peu dépassé, c'est toujours une bonne référence pour commencer.

Questions connexes