Chat en ruby


#1

Bonjour à toutes et à tous,

étant jeune développeur je me pose pas mal de question sur
l’architecture à adopter pour faire un chat avec Ruby.
Le programme serait juste une page web classique ruby que mon serveur
WEBrick ou Mongrel hébergerait, rien de
compliqué.
Le problème que je me suis posé est la façon dont ça marcherait … si
je demande à rafraichir la page de texte dans laquelle je viens
d’envoyer un message : ok mais comment envoyer l’information à tous
les clients qui ont aussi cette même page.

La réponse est peut être évidente mais je n’ai pour l’instant aucune
idée de faire marcher le gigot ^^

Merci de m’éclairer et me mettre sur les rails :wink:


#2

Bonsoir,

A mon avis, il faut voir le problème dans l’autre sens. C’est à dire
que ce sont les clients qui viennent chercher auprès du serveur s’il y
a des nouveaux messages :slight_smile:

Pierre


#3

une écoute active des clients sur le serveur … on peut faire ça de
façon “léger” sous ruby sans occuper trop de temps ( désolé les cours
de système d’exploitation m’ont quelque peu amoché la cervelle là
dessus :confused: )

zam en mode vacance demain aura le temps d’y songer à la belle étoile
^^

Mici :stuck_out_tongue:

On 29 juil, 22:26, “removed_email_address@domain.invalid” removed_email_address@domain.invalid


#4

Le 29/07/07, zamzamremoved_email_address@domain.invalid a écrit :

Le problème que je me suis posé est la façon dont ça marcherait … si
je demande à rafraichir la page de texte dans laquelle je viens
d’envoyer un message : ok mais comment envoyer l’information à tous
les clients qui ont aussi cette même page.

Disons que c’est tout le problème du protocole HTTP. Il est défini
comme “stateless”. En gros (mais tout le monde l’avais compris) le
serveur ne connais pas ces clients.

La notion de session a été plus ou moins créé (coté serveur ou via les
cookies) pour pallier a ce manque.

Alors soit tu fais ton système de chat en client serveur avec un autre
protocole que HTTP, soit effectivement, c’est aux clients d’aller
pecher l’information (via du javascript).

Après c’est une question de point de vue, comme bien souvent :smiley:


Yannick “Pouype” Francois
http://www.typouype.org
http://www.rubyfrance.org


#5

Oui il semblerait que des projets en Ajax soient présents sur le web,
j’y jetterai un oeil à mon retour de vacances.

Merci à vous pour votre aide

:wink:

On 30 juil, 09:13, “Yannick F.” removed_email_address@domain.invalid


#6

Salut,

La réponse n’engage que moi, et c’est peut etre pas la meilleur
solution,
mais c’est ce que je ferait.

Tu crée un fichier de log des conversations chat sur ton serveur, (sur
un
fichier, ou dans une base de donnée peut importe), tu place un
indicateur
temporel avant la ligne, dans un cookie, tu place a quel moment a était
fait
la derniere syncronisation, et tu provoque une syncro via un code en
javascript, qui va envoyer sur le serveur, l’indicateur temporel du
coookie
de ton client, ton serveur renvoie ce qui c passé depuis, donc le
dernier
message a un indicateur temporel, qui te sert a nouveau de réference
pour la
mise a jour (relit, 3/4 fois pour bien capter), moi je ferait comme ca

Salut

Le 29/07/07, zamzam removed_email_address@domain.invalid a écrit :


#7

Et pour faire des trucs hype, il ya toujours Comet
http://en.wikipedia.org/wiki/Comet_(programming) :slight_smile:

++

yk

Le 30/07/07, Eric D.removed_email_address@domain.invalid a écrit :


#8

Le 30/07/07, Yann KLIS a écrit :

Et pour faire des trucs hype, il ya toujours Comet
http://en.wikipedia.org/wiki/Comet_(programming) :slight_smile:

et Juggernaut :
http://juggernaut.rubyforge.org/


#9

Le problème que je me suis posé est la façon dont ça marcherait … si
je demande à rafraichir la page de texte dans laquelle je viens
d’envoyer un message : ok mais comment envoyer l’information à tous
les clients qui ont aussi cette même page.

La question de base c’est : combien as tu de clients simultanés ?

Si tu as moins d’une vingtaine de clients simultanés (équipe de projet,
groupe d’amis, etc.) alors il est possible de faire du nph. Ca existait
sur
les CGI, ça doit toujours exister. Il s’agit simplement de faire un
script
qui ne se termine pas. Le serveur envoie des lignes au client dès qu’il
les
reçoit (ce n’est donc pas au client d’aller chercher régulièrement les
nouveautés) et envoie régulièrement quelques lignes vides pour éviter
que la
connexion coupe. Le défaut c’est que ça demande autant de process que de
clients, et en rails ça bouffe beaucoup (ruby pourrait aller, mais rails
me
parait difficile vu l’occupation mémoire).

Sinon effectivement, ça se joue avec de l’ajax ou du rafraichissement de
page. L’idéal étant de pouvoir générer en permanence un fichier sur le
disque et que les clients aillent chercher ce fichier statique, histoire
de
ne pas déclencher du ruby/rails à chaque requête.
Il te restera alors du javascript pour interpréter ce fichier, et du
javascript pour faire une gestion “intelligente” des temps de
rafraichissement (rafraichissement rapide dans la minute après avoir
envoyé
du texte, puis de plus en plus lent, et plus lent quand il y a peu
d’activité). Met de toutes façons un minimum à 5s et un maximum à 5min.
En
dessous ton serveur ne va pas tenir la charge. Au dessus c’est le client
qui
va être excédé.

AMHA le mieux reste une bête passerelle flash vers IRC (ou mieux, un
client
IRC classique). le HTTP n’est pas trop fait pour ça.


Éric Daspet
http://eric.daspet.name/


#10

il y a aussi shooting_star qui a l’air plus mature:
http://rails.office.drecom.jp/takiuchi/archive/181
http://shooting-star.rubyforge.org/wiki/wiki.pl?Making_A_Chat_System_Within_5_Minutes


#11

On 7/30/07, Frédéric Logier removed_email_address@domain.invalid wrote:

Le 30/07/07, Yann KLIS a écrit :

Et pour faire des trucs hype, il ya toujours Comet
http://en.wikipedia.org/wiki/Comet_(programming) :slight_smile:

un implémentation de Comet en Rails:
http://code.google.com/p/ajaxmessaging/

il y a même un tutoriel “chat room in 5 minutes” :
http://code.google.com/p/ajaxmessaging/wiki/ChatRoomIn5Mins


#12

On 19 août, 09:09, “Patrick A.” removed_email_address@domain.invalid wrote:

il y a aussi shooting_star qui a l’air plus mature:http://rails.office.drecom.jp/takiuchi/archive/181http://shooting-star.rubyforge.org/wiki/wiki.pl?Making_A_Chat_System_

Tout ça m’a l’air fort intéressant !!!

Je vais tacher de m’y mettre cette semaine même si j’ai encore du
boulot à côté.
Bref merci pour ces bonnes adresses :smiley:

Zam² de retour de vacances


#13

On 20 août, 09:58, zamzam removed_email_address@domain.invalid wrote:

Zam² de retour de vacances
hum … j’ai des problèmes pour installer shooting_star …
je suis derrière un proxy, j’ai du chercher les gemmes et les
installer une à une mais quand j’ai fini la manip avec les dépendances
il me dit qu’il arrive pas à installer shooting_star

:confused:


gem_make.out--------------------
ruby extconf.rb i -b shooting_star-3.2.1.gem
checking for sys/epoll.h… no
checking for sys/event.h… no
epoll or kqueue required.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Provided configuration options:
–with-opt-dir
–without-opt-dir
–with-opt-include
–without-opt-include=${opt-dir}/include
–with-opt-lib
–without-opt-lib=${opt-dir}/lib
–with-make-prog
–srcdir=.
–curdir
–ruby=c:/ruby/bin/ruby


mkmf.log------------------------
have_header: checking for sys/epoll.h… -------------------- no

“cl -nologo -E -I. -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -I. -MD -Zi -
O2b2xg- -G6 conftest.c -P”
checked program was:
/* begin /
1: #include <sys/epoll.h>
/
end */


have_header: checking for sys/event.h… -------------------- no

“cl -nologo -E -I. -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -I. -MD -Zi -
O2b2xg- -G6 conftest.c -P”
checked program was:
/* begin /
1: #include <sys/event.h>
/
end */



#14

On 21 août, 23:01, “Jean-François Trân” removed_email_address@domain.invalid wrote:

sous Windows. Il utilise les appels systèmes epoll ou kqueue
qui existent sous Linux, normalement également sous FreeBSD,
donc vraisemblablement aussi dispo sous NetBSD, OpenBSD, MacOsX.

– Jean-François.


Ruby (http://www.rubyfrance.org) on Rails (http://www.railsfrance.org)

Merci du renseignement :confused:

je vais tenter avec AjawMessenging…

Mici ^^

Ps: j’avoue tout !!! je suis sou Windaube :s


#15

zamzam wrote:

Merci du renseignement :confused:

je vais tenter avec AjawMessenging…

Mici ^^

Ps: j’avoue tout !!! je suis sou Windaube :s

Ca se soigne très bien de nos jours :slight_smile:


#16

On 21 août, 23:13, Lionel B. removed_email_address@domain.invalid
wrote:

zamzam wrote:

Merci du renseignement :confused:

je vais tenter avec AjawMessenging…

Mici ^^

Ps: j’avoue tout !!! je suis sou Windaube :s

Ca se soigne très bien de nos jours :slight_smile:

Roohh … maintenant j’arrive pas à lancer script/plugin install
http://Ajax

il me dit commande non reconnue et à partir de RadRails, dans l’onglet
des plugin il me dit qu’il est déjà installé

Grouinphf de quoi s’arracher les cheveux >_<’


#17

zamzam a écrit :

il me dit commande non reconnue et à partir de RadRails, dans l’onglet
des plugin il me dit qu’il est déjà installé

Grouinphf de quoi s’arracher les cheveux >_<’

On vit également très bien sans RadRails !

– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)


#18

On 22 août, 00:02, “Jean-François Trân” removed_email_address@domain.invalid wrote:


Ruby (http://www.rubyfrance.org) on Rails (http://www.railsfrance.org)

me revoilà !
quelqu’un pourrait m’expliquer comment lancer ça sous windows ? merci

script/plugin install
http://ajaxmessaging.googlecode.com/svn/trunk/plugins/ajaxmessaging

il dit que c’est pas une commande interne … normal quoi :confused:


#19

zamzam :

hum … j’ai des problèmes pour installer shooting_star …
je suis derrière un proxy, j’ai du chercher les gemmes et les
installer une à une mais quand j’ai fini la manip avec les dépendances
il me dit qu’il arrive pas à installer shooting_star

“cl -nologo -E -I. -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -I. -MD -Zi -
O2b2xg- -G6 conftest.c -P”

On dirait que tu es sous WinWin ? Shooting Star ne fonctionne pas
sous Windows. Il utilise les appels systèmes epoll ou kqueue
qui existent sous Linux, normalement également sous FreeBSD,
donc vraisemblablement aussi dispo sous NetBSD, OpenBSD, MacOsX.

– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)


#20

zamzam :

me revoilà !
quelqu’un pourrait m’expliquer comment lancer ça sous windows ? merci

script/plugin install http://ajaxmessaging.googlecode.com/svn/trunk/plugins/ajaxmessaging

il dit que c’est pas une commande interne … normal quoi :confused:

Sous Windows, le bangpath (genre #!/usr/bin/env ruby) n’est je crois,
pas reconnu. Il faut donc faire : ruby script/plugin …

Après ça suppose aussi que tu as installé Subversion.

Un autre compagnon de galèr… oops, je veux dire un utilisateur de
Windows pourrait sûrement t’en dire plus.

-- Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)