![]() |
Модераторы: ginnie, korob2001 |
![]() ![]() ![]() |
|
CiklodoL |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 11.8.2007 Репутация: нет Всего: нет |
здравтсвуйте, я пишу IRC бота, в боте два процесса, один отсылает сообщения, второй отвечает за пинг сервера, эти два процесса используют один сокет, процесс пинга читает сокет в цикле:
while ($answ = <$socket>) { chomp $answ; if ($answ =~ /^PING(.*)$/i) { print $socket "PONG $1\r\n"; } } это процесс отсылки сообщения: while (1) { print $socket "PRIVMSG $chanel $text\r\n"; sleep (8); } проблема в том что процесс отсылки сообщения срабатывает только если что то написать на канале, то есть послать в сокет, т.е. проблемы с использованием сокета двумя процессами, собственно вопрос - как это решить? |
|||
|
||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: нет Всего: 47 |
я не спец в perl'е, но сокеты бывают блокирующие и неблокирующие. Может какая блокировка мешает, хотя прием-передача не должны влиять друг на друга
|
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 1 Всего: 18 |
bel_nikita, разговор не об этом, приведите весь кусок кода, как у Вас обрабатываются данные и как вы определяете момент, что пора послать сообщение.
А поповоду irc, есть куча модулей, мож с ними проще? |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 2 Всего: 84 |
CiklodoL, ничем не исправить, если только будете с периодичностью передавать команду PING (зависит от настроек сервера). IRC такого вам не позволит (в большинстве случаев), т.е. в вашей ситуации это нормально.
Но можете глянуть на огромное количество модулей для работы с этим протоколом. http://search.cpan.org/search?query=irc&mode=all В общем с IRC не выйдет, или сделайте самопальный пинг ![]() |
|||
|
||||
CiklodoL |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 11.8.2007 Репутация: нет Всего: нет |
с ними то может и проще, но самому написать куда интереснее и познавательней) вот привоже мой код, и результат его работы:
|
||||||
|
|||||||
vadiml |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: нет Всего: 7 |
CiklodoL
если я правильно помню протокол IRC, то PING можно слать не через опр. промежуток времени от предыдущего PING'а, а от последней отправки любого сообщения на сервер, т.е. отправка любого сообщения равносильна PING'у, а получение -- PONG'у. Исходя из этого нет смысла выносить ping/pong в отдельный процесс, и таймер для отсчета времени для отправки PING'а можно разместить в основном. Так же если вы долго сами не будете ни чего посылать серверу, то он сам Вам пошлет PING. |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 2 Всего: 84 |
Да и в этом случае надо эту команду обработать и послать PONG, иначе отключение неизбежно. Я же советовал сделать "самопальный пинг", т.е. внтури самого бота. Т.к. чтобы что-то" получить", надо что-то "послать" ![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: Системное программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |