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
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
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
[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ą.
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
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