2009-06-10 8 views
1

Quelle est la meilleure façon pour un serveur de traiter des messages en Perl?Comment configurer les messages en Perl à traiter?

J'essaie

while (1) { 
    # Get Queue Messages 
    # Do Work 
    sleep(10); 
} 

Mon schéma MySQL est du genre

create table message (
    id int auto_increment primary key, 
    processed int, 
    message varchar(100) 
) 

et dans mes "Messages #Get file d'attente", je fais une demande comme

select * from message where processed = 0 

, puis retournez le drapeau quand c'est fait.

Y a-t-il une meilleure façon de procéder?

Répondre

1

Eh bien, cela dépend de ce que sont ces 'messages' et jusqu'où vous voulez aller. Pour beaucoup de circonstances, ce que vous faites est probablement très bien.

Si vous utilisez ce mécanisme pour un volume élevé de trafic de communication interprocessus entre votre serveur et ses clients, vous pouvez toutefois utiliser une instance du 'database-as-IPC anti-pattern'. Ce que l'on entend par là, c'est que ce n'est pas une bonne chose d'utiliser une base de données pour la transmission de messages de volume élevé entre les processus.

Si cette table de messages est utilisée de cette manière, vous pouvez envisager de faire une implémentation IPC 'correcte'. Le Perl IPC man page a beaucoup d'informations utiles pour cela.

+0

Ce sont pour la plupart des requêtes d'apache/web, que j'essaie de décharger sur un démon. J'ai également l'intention de garder tous ces messages, est-ce que cette échelle? – Timmy

+0

Il ne s'agira pas très bien d'un grand nombre de messages, non. Cela dépend du nombre de messages que vous allez traiter. C'est probablement une bonne idée de faire des tables de messages mensuelles au lieu d'une seule, ou même chaque jour si cela va être une vraie application à haut volume. Ou, bien sûr, vous pouvez utiliser des mécanismes IPC non basés sur des bases de données comme je l'ai mentionné, pour indiquer directement au démon ce que vous voulez traiter. Si vous voulez/avez besoin d'un enregistrement permanent des messages, vous pouvez les insérer dans une base de données. – chaos

Questions connexes