2016-06-16 4 views
5

Как определить конечную точку события отправления сервера (SSE) для службы. Документы, похоже, не охватывают этот случай.Служба поддержки серверных служб

Если Servant не предназначен для использования в реальном времени, какой серверный сервер Haskell поддерживает SSE?

+0

Мне было бы интересно, если бы вы могли обновить вопрос с помощью рабочего примера этой проблемы или поделиться ссылкой на публичное репо? – akegalj

ответ

3

servant использует WAI, и вы всегда можете опустить вниз в нормальных WAI приложений и все библиотеки, которые существуют для него с комбинатором Raw. Таким образом, вы можете использовать Network.Wai.EventSource от wai-extra, чтобы создать Application, который является типом обработчиков для конечных точек Raw. Что-то наподобие:

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

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

Это сработало! Мне пришлось обойти некоторые проблемы «ByteString» и «Builder», но сообщение, которое отлично работало в 1000 подключенных потоках. Я постараюсь сделать это как свою собственную вещь и посмотреть, буду ли я публиковать ее как библиотеку – Subra

0

Да, я не уверен в событиях, отправленных сервером в сервисе servant, но для более полных веб-фреймворков, таких как Yesod, есть поддержка.

Посмотрите на пакет yesod-eventsource

Йесод имеет довольно хорошую поваренную книгу, так что вы можете событие найти там довольно хороший example

Смежные вопросы