Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многопоточность, Создание jabber-бота. 
:(
    Опции темы
Unown
  Дата 9.4.2011, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 9.4.2011

Репутация: нет
Всего: нет



Добрый день. Есть такой вопрос по Ruby, так скажем "от начинающего".

Занимаюсь разработкой простенького Jabber-бота для личных целей. Застрял на этапе создания многопользовательского режима(одновременного доступа к боту с нескольких JID). Слышал, что в Ruby есть своя реализация псевдо-многопоточности, но не нашел вменяемого мануала, не могли-бы разъяснить на пальцах как это делается?

Ruby 1.9.1
xmpp4r 0.5

Блок приема сообщений работает примерно так:
Код
$cl.add_message_callback do |msg|
 #Поиск пользователя в БД по msg.from.
 #Модуль для регистрации
 #Блок с оператором case где и происходит выборка действия по команде из msg.body.
 ##Вообще тут могут присутствовать еще блоки $cl.add_message_callback do |msg|...end для организации многоуровнего меню.
 #Отправка результата на msg.from
end


Это сообщение отредактировал(а) Unown - 9.4.2011, 10:43
PM MAIL   Вверх
Goganchic
Дата 9.4.2011, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



http://www.ruby-doc.org/docs/ProgrammingRu...ut_threads.html - толковый туториал по потокам
по сути делается все просто:
  •  создаем поток (Thread.new)
  •  выполняем функцию в отдельном потоке
  •  делаем thread.join



Цитата(Unown @  9.4.2011,  09:40 Найти цитируемый пост)
псевдо-многопоточности


почему псевдо? Нормальная многопоточность там, это в Python псевдо, а в руби обычная многопоточность через сишный longjmp.
PM Jabber   Вверх
Unown
Дата 12.4.2011, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 9.4.2011

Репутация: нет
Всего: нет



Цитата(Goganchic @ 9.4.2011,  10:04)
http://www.ruby-doc.org/docs/ProgrammingRu...ut_threads.html - толковый туториал по потокам
по сути делается все просто:



  •  создаем поток (Thread.new)


  •  выполняем функцию в отдельном потоке


  •  делаем thread.join





Цитата(Unown @  9.4.2011,  09:40 Найти цитируемый пост)
псевдо-многопоточности


почему псевдо? Нормальная многопоточность там, это в Python псевдо, а в руби обычная многопоточность через сишный longjmp.

Ну я про этот мануал и говорил, что видел но абсолютно не понял что в нем что и как применить к моему конкретному случаю...

Появился еще 1 вопрос. Есть модуль проверки почты:
Код

#!/usr/bin/ruby1.9.1
# coding: utf-8
 
require 'net/pop'

ma=['login', 'pass', 'pop.server.ru'] #До БД пока руки не дошли, поэтому массив
def mails_(ser,log,pas)
pop=Net::POP3.new(ser)
pop.start(log,pas)
if pop.mails.empty?
   i=0
 else
   i=0
   pop.mails.each do |mp|
     #puts mp.pop
     i+=1
   end
end
return i
pop.finish
end
 
puts mails_(ma[2],ma[0],ma[1])

Пока он работает отдельно, то все нормально. но когда пробую отослать результат в сообщении, то ничего не происходит.

UPD: Включил Jabber::debug вот что показывает:
Код

D, [2011-04-12T22:43:30.453415 #17985] DEBUG -- : TRYING TO CLOSE, STILL PROCESSING 1 STANZAS
D, [2011-04-12T22:43:30.453478 #17985] DEBUG -- : TRYING TO CLOSE, STILL PROCESSING 1 STANZAS
D, [2011-04-12T22:43:30.453540 #17985] DEBUG -- : TRYING TO CLOSE, STILL PROCESSING 1 STANZAS
D, [2011-04-12T22:43:30.453601 #17985] DEBUG -- : TRYING TO CLOSE, STILL PROCESSING 1 STANZAS
D, [2011-04-12T22:43:30.453664 #17985] DEBUG -- : TRYING TO CLOSE, STILL PROCESSING 1 STANZAS
D, [2011-04-12T22:43:30.453726 #17985] DEBUG -- : TRYING TO CLOSE, STILL PROCESSING 1 STANZAS
D, [2011-04-12T22:43:30.453788 #17985] DEBUG -- : TRYING TO CLOSE, STILL PROCESSING 1 STANZAS
D, [2011-04-12T22:43:30.453851 #17985] DEBUG -- : TRYING TO CLOSE, STILL PROCESSING 1 STANZAS
D, [2011-04-12T22:43:30.453912 #17985] DEBUG -- : TRYING TO CLOSE, STILL PROCESSING 1 STANZAS
D, [2011-04-12T22:43:30.453976 #17985] DEBUG -- : TRYING TO CLOSE, STILL PROCESSING 1 STANZAS



Это сообщение отредактировал(а) Unown - 12.4.2011, 21:45
PM MAIL   Вверх
DeTeam
Дата 15.4.2011, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.10.2009
Где: Россия, Москва

Репутация: нет
Всего: нет



http://www.igvita.com/2008/11/13/concurren...a-myth-in-ruby/

по поводу псевдо - почитайте
PM MAIL WWW ICQ Jabber   Вверх
Goganchic
Дата 16.4.2011, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



Цитата(DeTeam @ 15.4.2011,  13:47)
http://www.igvita.com/2008/11/13/concurren...a-myth-in-ruby/

по поводу псевдо - почитайте

да, признаюсь, что-то я тупанул :( перепутал с exception-ами :(
PM Jabber   Вверх
DeTeam
Дата 16.4.2011, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.10.2009
Где: Россия, Москва

Репутация: нет
Всего: нет



Как-то достаточно давно эту тему обсуждали на RailsConf'е в Москве, доклад про EventMachine был
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0742 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.