that enable users to receive information as soon as it is published by its authors, rather than requiring that they or their software check a source periodically for updates. — Wikipedia
construir esse tipo de aplicação para web, HTTP. Transportar dados em tempo real com HTTP é um saco. Baixa latência, unidirecional, fazer coisas como ajax polling.
i o n = n e w W e b S o c k e t ( ' w s : / / e x a m p l e . o r g : 1 2 3 4 5 / m y a p p ' ) ; c o n n e c t i o n . o n m e s s a g e = f u n c t i o n ( e ) { v a r s e r v e r _ m e s s a g e = e . d a t a ; c o n s o l e . l o g ( s e r v e r _ m e s s a g e ) ; } v a r m e s s a g e = { ' n a m e ' : ' D u k e ' , ' c o m m e n t ' : ' I a m a t W e W e b C o n f ' } ; c o n n e c t i o n . s e n d ( J S O N . s t r i n g i f y ( m e s s a g e ) ) ; A API do WebSockets pura não é muito produtiva
i s C l i e n t ) { T e m p l a t e . h e l l o . g r e e t i n g = f u n c t i o n ( ) { r e t u r n " W e l c o m e t o r a d i o . " ; } ; } i f ( M e t e o r . i s S e r v e r ) { M e t e o r . s t a r t u p ( f u n c t i o n ( ) { / / c o d e t o r u n o n s e r v e r a t s t a r t u p } ) ; } Código base que o meteor cria, isClient apenas no browser o codigo é executado, isServer apenas no servidor
e s e r á c a r r e g a d o p r i m e i r o c l i e n t / # C a r r e g a d o a p e n a s n o c l i e n t c l i e n t / l i b / # S e m p r e s e r á c a r r e g a d o p r i m e i r o s e r v e r / # C a r r e g a d o a p e n a s n o s e r v e r s e r v e r / l i b / # S e m p r e s e r á c a r r e g a d o p r i m e i r o n o s e r v e r t e s t s / # N ã o s ã o c a r r e g a d o s docs.meteor.com/#structuringyourapp Criar uma aplicação em um arquivo só não é muito bom, o meteor tem uma forma de ler as pasta, você pode criar sua estrutura
e w M e t e o r . C o l l e c t i o n ( " s t a t i o n s " ) ; / / s e r v e r M e t e o r . p u b l i s h ( " p u b l i c _ s t a t i o n s " , f u n c t i o n ( ) { " u s e s t r i c t " ; r e t u r n S t a t i o n s . f i n d ( { p u b l i c : t r u e } ) ; } ) ; / / c l i e n t M e t e o r . s u b s c r i b e ( ' p u b l i c _ s t a t i o n s ' ) ; T e m p l a t e . i n d e x . p u b l i c _ s t a t i o n s = f u n c t i o n ( ) { r e t u r n S t a t i o n s . f i n d ( ) . f e t c h ( ) ; } ; Criando canais, quem estiver subrescrito num determinado canal, recebe apenas dados que foi especificado nele
p c " : " 2 . 0 " , " m e t h o d " : " s u b t r a c t " , " p a r a m s " : { " s u b t r a h e n d " : 2 3 , " m i n u e n d " < - - { " j s o n r p c " : " 2 . 0 " , " r e s u l t " : 1 9 , " i d " : 3 } - - > { " j s o n r p c " : " 2 . 0 " , " m e t h o d " : " s u b t r a c t " , " p a r a m s " : { " m i n u e n d " : 4 2 , " s u b t r a h e n d " < - - { " j s o n r p c " : " 2 . 0 " , " r e s u l t " : 1 9 , " i d " : 4 } Apenas um exemplo do JSON-RPC, o Meteor usa RPC para comunicação client <=> server
h o d s ( { c r e a t e S t a t i o n : f u n c t i o n ( o p t i o n s ) { " u s e s t r i c t " ; v a r s t a t i o n = { o w n e r : t h i s . u s e r I d , t i t l e : o p t i o n s . t i t l e , d e s c r i p t i o n : o p t i o n s . d e s c r i p t i o n } ; r e t u r n S t a t i o n s . i n s e r t ( s t a t i o n ) ; } } ) ;