2010-11-08 3 views
1

Hi J'implémente une application de type messagerie instantanée dans Erlang. J'ai utilisé un processus d'agent pour chaque client se connectant au serveur, et le processus d'agent est chargé d'envoyer les messages à une passerelle de messagerie, qui à son tour envoie le message à un autre processus d'agent. Il semble que la messagerie inter-processus erlang est implémentée en tant que connexions tcp. Il y aura donc une connexion pour chaque processus d'agent à la passerelle. Cela signifie-t-il que le nombre d'agents sur une seule machine ne dépassera jamais 65 535 en raison de la restriction des numéros de port?question sur la messagerie inter-processus

Merci d'avance!

Répondre

1

Certaines limites pour Erlang: Efficiency Guide User's Guide/10 Advanced:

noeuds distribués noeuds connus A de noeud distant y doit être connu au noeud X s'il y a des PID, les ports, les références, ou funs (données Erlang types) à partir de Y sur X, ou si X et Y sont connectés. Le nombre maximum de nœuds distants simultanément/jamais connus d'un nœud est limité par le nombre maximum d'atomes disponibles pour les noms de nœuds. Toutes les données concernant les noeuds distants, à l'exception du nom de noeud atom, sont récupérées par le garbage. Les noeuds connectés Le nombre maximum de noeuds connectés simultanément est limité par le nombre maximum de noeuds distants connus simultanément, le nombre maximal de ports (Erlang) disponibles ou le nombre maximal de sockets disponibles.

0

Erlang connecte les nœuds Erlang sur le réseau, pas les processus Erlang. (Et chaque nœud Erlang est un processus du système d'exploitation). Vous manquerez donc de connexions TCP si vous avez plusieurs dizaines de K de nœuds Erlang sur une seule machine (ce qui est déraisonnable), et non lorsque vous avez plusieurs dizaines de K de processus Erlang sur un seul nœud Erlang. (Je ne donne aucun nombre absolu car chaque nœud Erlang devra également communiquer avec epmd qui produit une autre connexion réseau, mais vous n'aurez probablement pas de processus de 30 + K de nœuds Erlang, OS sur une seule machine.)

+0

Les nœuds Erlang sont connectés en maillage complet, de sorte que le 64K correspond à tous les nœuds connectés dans le réseau, pas sur un seul nœud. Avoir autant de nœuds serait également déraisonnable :) – Zed

+0

Eh bien, si la chose IM prend et doit fonctionner sur plus de 64k cœurs de processeur ... ;-) –

+0

Merci beaucoup! J'ai trouvé que c'est vrai quand les processus se connectent sur différentes machines. Cependant, quand ils sont sur la même machine, chaque processus consomme une connexion tcp via 127.0.0.1 (peut-être à epmd?). Cela ne semble pas être un problème puisque les adresses de boucle sont abondantes :) –

Questions connexes