2016-06-16 8 views
5

Jak zdefiniować punkt końcowy zdarzenia sedowania serwera (SSE) dla pracownika. Dokumenty nie wydają się obejmować tej sprawy.Zdarzenia wysłane z serwera usługi pomocniczej obsługują

Jeśli urządzenie Servant nie jest zaprojektowane do użycia w czasie rzeczywistym, które rozwiązanie Haskell obsługuje serwer SSE?

+0

Byłbym zainteresowany, gdyby można było zaktualizować pytanie z roboczym przykładem tego problemu, czy może udostępnić link do publicznego repo? – akegalj

Odpowiedz

3

servant wykorzystuje WAI, i zawsze można zanurzyć w dół do normalnych WAI zastosowań i wszystkich biblioteki, które istnieją dla niego z kombinatorem Raw. Tak więc można użyć Network.Wai.EventSource z wai-extra, aby utworzyć Application, który jest typem procedur obsługi dla punktów końcowych Raw. Coś w rodzaju:

type MyApi = "normalapi" :> NormalApi 
     :<|> "sse" :> Raw 

myServer :: Server MyAPI 
myServer = normalServer :<|> eventSourceAppChan myChan 
+0

To działało! Musiałem obejść niektóre problemy 'ByteString' kontra' Builder', ale post sprawdził się bardzo dobrze w 1000 połączonych strumieni. Spróbuję to zinterpretować jako własną rzecz i zobaczyć, czy opublikuję ją jako bibliotekę – Subra

0

Tak, nie jestem pewien co do zdarzeń wysłanych przez serwer w służbie, ale bardziej wszechstronne ramy internetowe, takie jak Yesod, mają na to wsparcie.

Spójrz na opakowaniu yesod-eventsource

Yesod ma całkiem miłą książkę kucharską, dzięki czemu można wydarzenie tam znaleźć całkiem ładne example

Powiązane problemy