App. realtime with faye

Ciao a tutti sono nuovo del mondo ruby/rails e sto creando un
applicativo web realtime che mi permetta di generare dei post dinamici
stile social network;

Metodo uno funzionante:
ho startato faye via client/browser: channel.js:

$(function() {
// Create a new client to connect to Faye
var client = new Faye.Client(‘http://localhost:9292/faye’);

    var user_id = $('#user_id').val();
    var user = getUser(user_id);
    var public_subscription = []

    public_subscription[0] = client.subscribe('/user/' + user_id +

‘/posts’, function(data) {
printPost(data);
});

    if( user.hashtags.length > 0 ){

        for (var i = 1; i <= user.hashtags.length; i++) {
            var hashtag =  user.hashtags[i - 1];
            public_subscription[i] =

client.subscribe(‘/posts/hashtag/’ + hashtag._id, function(data) {
printPost(data);
if( data.gr ) addPostGroup(data);
});

            if( hashtag.post_ids.length > 0 ){
                for (var j = 1; j <= hashtag.post_ids.length; j++) {
                    var post_id =  hashtag.post_ids[j - 1];

                    public_subscription[i] =

client.subscribe(‘/post/’+post_id, function(data) {
if( data.comment ) addComment(data.post_id,
data._id, data);
if( data.like ) addLike(data._id,
data.liker_ids.length);

                    });

                }

            }
        }
    }

    if( user.posts.length > 0 ){
        for (var i = 1; i <= user.posts.length; i++) {
            var post =  user.posts[i - 1];
            public_subscription[i] =

client.subscribe(‘/post/’+post._id, function(data) {
if( data.comment ) addComment(data.post_id,
data._id, data);
if( data.like ) addLike(data._id,
data.liker_ids.length);
});
}
}

});

post.js:

$(“#postWallForm”).ajaxForm({
type: ‘post’,
success: function(post){

        var hashtags_ids = post.hashtag_ids;
        var group = post.group;
        for (var i = 0; i < hashtags_ids.length; i++) {
            var hashtag_id = hashtags_ids[i];
            publish(post, '/posts/hashtag/' + hashtag_id);

        }

        if( typeof group != 'undefined' ){
            for (var i = 0; i < group.hashtag_ids.length; i++) {
                var keyword = group.hashtag_ids[i];
                post['gr'] = 1;
                publish(post, '/posts/hashtag/' + keyword);
            }
        }
        client.publish('/user/' + post.user_id + '/posts' , post);
        return false;

});

quando viene eseguito il submit del form, lui mi salva i dati e in più
crea tramite faye il sistmea relatime chemi va a postare sul wall;

la mia domanda è questa ogni volta che l’utente passa da una pagina
all’altra lui mi apre e chiude la connessione a faye?? non cè un modo
per far persistere la connessione??

secondo metodo non funzionante:

ApplicationController:

def self.subscription(user_id)
user = User.find(user_id)
EM.run {
client = Faye::Client.new(‘http://localhost:9292/faye’)

    client.subscribe('/user/posts/' + user_id) do |post|
      PostsController.print(post)
    end

    user.hashtags do |hashtag|

      client.subscribe('/posts/' + hashtag.id) do |post|
        PostsController.print(post)
      end

    end

  }

end

la mia domanda è la chiamata avviene normalmente, ma cè un modo per
interagire col DOM ?? oppure stampare il post a video?? perchè nel
momento che il subscribe viene interogato non so come posso far stampare
il mio post a video.

graziem e scusate se sono stato lungo e imperfetto.

On Monday, July 15, 2013 at 10:18 AM, Roberto S. wrote:

var post_id = hashtag.post_ids[j - 1];
}
if( data.comment ) addComment(data.post_id,

}
});
ApplicationController:
user.hashtags do |hashtag|

Ml mailing list
[email protected] (mailto:[email protected])
http://lists.ruby-it.org/mailman/listinfo/ml

Non saprei aiutarti in quanto Faye non l’ho mai provato, ma riusciresti
a mettere il codice in una gist? [1]
Faciliti molto la lettura e invogli le persone ad aiutarti :wink:

Federico

[1] https://gist.github.com

i sorgenti:

post.js
https://gist.github.com/ikaiser/d421ef39f6bf95220cce

channel.js
https://gist.github.com/ikaiser/953e00d56c3c05a9e731

Non si pu mantenere una connessione persistente sul cambio pagina ,
dovresti semplicemente evitare di cambiarla , in particolare potresti
usare
librerie di frontend come ember o backbone che ti facilitano la vita ,
ovviamente questo richiede una riscrittura completa dell’applicativo.

Qualcuno ha qualche altra soluzione?

Daniele.

2013/7/15 Roberto S. [email protected]

putroppo non posso riscrivere l’app, adesso; sicuramente in futuro mi
baserò o su ember o su bakbone, però purtroppo adesso devo trovare una
soluzione.
grazie.

Ciao, hai gi provato a vedere questo ?
http://faye.jcoglan.com/browser.html

2013/7/15 Roberto S. [email protected]

Roberto S. wrote in post #1115455:

putroppo non posso riscrivere l’app, adesso; sicuramente in futuro mi
baserò o su ember o su bakbone, però purtroppo adesso devo trovare una
soluzione.
grazie.

Cio Roberto,

Hai provato GitHub - turbolinks/turbolinks-classic: Classic version of Turbolinks. Now deprecated in favor of Turbolinks 5. ?

Duilio tu hai gi provato turbolinks ?
Io in passato ho avuto problemi con script che facevano la stessa cosa ,
ricordo in particolare problemi con link generati dinamicamente da
javascript , submit post e utilizzando document.href…

Daniele.

2013/7/15 Duilio R. [email protected]

Hai provato GitHub - turbolinks/turbolinks-classic: Classic version of Turbolinks. Now deprecated in favor of Turbolinks 5. ?

Io ho usato pjax per un progetto, e mi sono trovato abbastanza bene;
e molto piu leggero e quindi comprensibile rispetto a BackBone,
Angular, Ember, ecc…ecc…


David N. Welton

http://www.welton.it/davidw/

http://www.dedasys.com/

Per il momento il mio problema principale e far si che il client
instanzi una volata soltanto faye.
poi passero a vedere come far si a rendere le viste. o interagire col
DOM.

Io uso private_pub per interfacciarmi a faye

Alessandro R.

2013/7/15 Roberto S. [email protected]

In un progetto usando socket.io e node.js avevamo risolto tenendo
aggiornato su node un array di utenti connnessi con il loro socket ID,
email o un ID che vuoi.
A chiusura connessione mettevamo in coda una cancellazione dal registro
ritardata in modo da poter rifare il match “nuova connessione”
“utente” nel lasso di tempo stabilito.
Funzionava e funziona tuttora bene.

Ciao

Andrea

On Jul 15, 2013, at 12:24 PM, Roberto S.
[email protected] wrote:

http://lists.ruby-it.org/mailman/listinfo/ml
Andrea C.
[email protected]