Perl способ создавать сокеты быстро (1000+) - PullRequest
2 голосов
/ 14 июля 2010

У меня есть сервер Perl, и когда он загружается, он подключается к более чем 1000 клиентам. Настройка всех соединений с помощью SSL занимает около 30-45 минут. Я пытаюсь уменьшить время начала до чего-то более разумного. Я пытался играть с потоками, чтобы разгрузить работу, но не могу заставить ее работать. Создание сокета в одном потоке и возвращение его вызывающей стороне не работает должным образом. Попытка передать дескриптор файла и воссоздать с помощью IO :: Socket :: SSL-> new_from_fd (), чтобы воссоздать сокет обратно в вызывающей стороне, но не удалось.

Есть ли у кого-нибудь какие-либо предложения относительно того, как быстро создать такое количество сокетов? Или, по крайней мере, быстрее, чем O (n) ...

ОБНОВЛЕНИЕ: Похоже, что POE-фреймворк - это определенно то, что я хочу исследовать. Документы звучат так, как будто они могут делать то, что мне нужно. Сейчас я создаю Proof of concept и у меня возникают проблемы с доступом к созданным объектам Socket в сессиях. Я могу создавать сокеты в сеансах POE, но затем, когда они будут готовы, я хочу, чтобы моя основная программа собирала созданные сокеты в один хеш. Кто-нибудь знает, как получить объекты из сеансов POE?

ОБНОВЛЕНИЕ: Есть идея, включающая либо использование глобальной переменной и добавление сокетов к ней в сеансах, либо сохранение ссылок на созданные сеансы и доступ к их кучам для их агрегирования. Попробуй сейчас ...

1 Ответ

3 голосов
/ 15 июля 2010

Посмотрите на этот TCP SSL-клиент код в POE. Пример может быть легко расширен, чтобы сделать то, что вы просили. Если вы раньше не кодировали POE , есть кривая обучения, но она очень хорошо задокументирована .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...