2009-06-10 2 views
1

Каков наилучший способ для сервера обрабатывать сообщения в Perl?Как настроить сообщения в Perl для обработки?

Пытаюсь

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

Моя MySQL схема имеет своего рода

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

и в моих "#get Очередь сообщений", я делаю запрос как

select * from message where processed = 0 

, а затем переверните флаг, когда это будет сделано.

Есть ли лучший способ сделать это?

ответ

1

Ну, это зависит от того, что такое «сообщения» и как далеко вы хотите идти. По большому счету, то, что вы делаете, наверное, просто отлично.

Если вы используете этот механизм для большого объема межпроцессного обмена данными между вашим сервером и его клиентами, вы можете совершить экземпляр 'database-as-IPC anti-pattern'. В основном это означает, что небезопасно использовать базу данных для рутинных сообщений с большими объемами сообщений между процессами.

Если эта таблица сообщений используется таким образом, вам может потребоваться выполнить «правильную» реализацию IPC. Perl IPC man page содержит много полезной информации.

+0

Это в основном запросы от apache/web, которые я пытаюсь разгрузить демону. Я также намерен сохранить все эти сообщения, будет ли этот масштаб? – Timmy

+0

Он не будет очень хорошо масштабироваться для большого количества сообщений, нет. Независимо от того, зависит ли оно от того, сколько сообщений вы собираетесь обрабатывать. Вероятно, неплохо делать ежемесячные таблицы сообщений вместо одного или даже ежедневно, если это будет реальное приложение большого объема. Или, конечно же, вы можете использовать механизмы, не связанные с базой данных IPC, как я упоминал, для непосредственного указания демона тому, что вы хотите обработать. Если вам нужна/нужна постоянная запись сообщений, тем не менее, то вставлять их в базу данных целесообразно. – chaos