Renderowanie bez nagłówków

Cześć, potrzebuję zrobić w Railsach kilka metod, które zwracają dane, ale bez nagłówków HTTP (dane nie będą zwracane do przeglądarki). Znacie może jakiegoś prostego GEM’a, który będzie potrafił to zrobić?
Dla przykładu, zamiast

[code]HTTP/1.1 200 OK
Connection: close
Date: Sun, 24 Jan 2010 09:25:18 GMT
Transfer-Encoding: chunked
Content-Type: /; charset=utf-8
X-Runtime: 0.014297
Set-Cookie: _blog_session=…snip…; path=/; HttpOnly
Cache-Control: no-cache

itd., zawartość strony[/code]

Chcę otrzymać

zawartość strony

Pozdrawiam.

WHY OH WHY?! :slight_smile:

Railsy się tym nie zajmują, musiałbyś to raczej hackować w serwerze, którego używasz. Tylko robienie odpowiedzi HTTP, która nie jest odpowiedzią HTTP jest conajmniej dziwne :wink:

Hmm, więc trzeba pisać osobno na socketach, tak? :expressionless: No szkoda, będę musiał to zrobić z użyciem EventMachine :confused:

Dzięki, pozdro.

Ja bym to dal jako Rack, i zwrocil tylko body i tyle

To teraz sprawdź to na dowolnym produkcyjnym serwerze (np. thin) i zobacz co dostaniesz :wink:

Snejk47: ale właściwie po co coś takiego robić? Jaki klient to będzie odczytywał?

Ja się chętnie też dowiem po co ta herezja…

Jako API dla innych skryptów (nie moich, nie u mnie) czy gier, gdzie sockety działają jak lubią, raz odbiorą 50 znaków więc praktycznie same nagłówki, a raz normalnie całość (komunikaty te nie są długie, max 30 znaków, ale z headerami wygląda to inaczej, prawdopodobnie poradził bym sobie z tym, ale to ostateczność (zaznaczam, że miałoby to być uniwersalne API = jeżeli język skryptowy udostępnia sockety to można korzystać z API (nawet w 10 letnich grach)).

To są sockety dude. Musisz sobie cacheować fragmenty i z nich składać protokół. Np jak masz protokół, który “\n” używa do rozdzielenia odpowiedzi to musisz składać kawałki aż nie masz “\n” a następnie rozdzielić w tamtym miejscu i sparsować dopiero kawałek jednocześnie pamiętajac w cache’u wszysto co jest po “\n” jako część następnej odpowiedzi. Jeśli chcesz zwracać dane nie do przeglądarki to nie ma znaczenia. Dzięki temu, że używasz poprawnego http będziesz mógł mieć klienta w skryptach w ruby, perlu czy nawet na iphone bo bibliotek do http jest od zatrzęsienia a jak będziesz udawał http to powodzenia :slight_smile:

Nie rozumiem ludzi, którzy nie rozumieją że TCP to stream.

RFC2616 chyba czeka do przeczytania :slight_smile:

[quote=Snejk47]Cześć, potrzebuję zrobić w Railsach kilka metod, które zwracają dane, ale bez nagłówków HTTP (dane nie będą zwracane do przeglądarki). Znacie może jakiegoś prostego GEM’a, który będzie potrafił to zrobić?
Dla przykładu, zamiast

[code]HTTP/1.1 200 OK
Connection: close
Date: Sun, 24 Jan 2010 09:25:18 GMT
Transfer-Encoding: chunked
Content-Type: /; charset=utf-8
X-Runtime: 0.014297
Set-Cookie: _blog_session=…snip…; path=/; HttpOnly
Cache-Control: no-cache

itd., zawartość strony[/code]

Chcę otrzymać

zawartość strony

Pozdrawiam.[/quote]
Jeżeli twoja komunikacja jest w HTTP, to musisz odpowiadać zgodnie z protokołem z HTTP.

Jeżeli chciałbyś odpowiadać klientom na gołym sockecie (i po przemyśleniu, że też potrzebujesz tu nawet własny protokół choćby do markowania końca wiadomości) to go po prostu wystaw. Railsy ci tutaj szczególnie nie pomogą.

[quote=Snejk47]zawartość strony
Pozdrawiam.[/quote]
[trolling]Wyślij odpowiednią ilość znaków ^H.[/trolling]

Nie rozumiem ludzi, którzy nie rozumieją że TCP to stream.[/quote]
A to też ciekawa uwaga. Co więcej, w HTTP/1.1, jeżeli klient nie zaznaczy inaczej, transfer-encoding: chunked może zostać wrzucony domyślnie, więc klient, który obsługuje HTTP/1.1 powinien implementować obsługę streamingu.

Nie rozumiem ludzi, którzy nie rozumieją że TCP to stream.[/quote]
Hmm, faktycznie :stuck_out_tongue:

Ogólnie chcę napisać aplikację, która będzie operowała na bazie danych udostępniając normalny WEB panel dla klientów i myślałem, żeby razem z tym w tej samej aplikacji udostępnić API (no i tak pewnie też zrobię).

Dzięki wszystkim za rady i nakierowanie “co i jak”, macie u mnie piwo :wink:

API po http to ostatnio modna sprawa. Nie rozumiem czemu próbujesz tutaj wyciąć http ?

A programowanie to konkurs popularności :wink: