2

Network.WebSocketsを使用してWebSocketサーバーをプログラミングしてきました。

runServer次のようにWebSocketサーバーを起動します。

app :: Request -> WebSockets Hybi00 ()
app _ = app1
main :: IO ()
main = runServer "0.0.0.0" 8000 app

しかし、私は本当にWebSocketサーバーが通常のSnapWebサーバーと一緒にポート80を使い果たしてほしいと思っています。

Node.jsは、Socket.ioでこれを行うことができます(左の例のhttp://socket.io/#how-to-useを参照)。

これは、同様のことを実現するRubyライブラリです:https ://github.com/simulacre/sinatra-websocket

Haskellでこれをどのように行うでしょうか?

4

2 に答える 2

4

websockets-snapパッケージには次の機能があります。

runWebSocketsSnap::プロトコルp=>(リクエスト-> WebSockets p())->スナップ()

これにより、アプリケーションのほぼすべての場所からWebSocketを使用できるようになります。簡単な例を次に示します。

main = quickHttpServe $ route [ ("hello", writeText "hello world")
                              , ("websocket", runWebSocketsSnap ...)
                              ]
于 2012-10-09T01:24:24.690 に答える
3

Warpは、通常のHTTPリクエストをWebSocketリクエストにプロモートするためのフックを提供します。Snapに適したサーバーがわかりません...これは、Warp/WAIアプリに使用するパターンです。

httpApp :: Application
httpApp req = ...

wsApp :: WebSockets.Request -> WebSockets Hybi10 ()
wsApp req = do
   -- check if the request should be handled
   if shouldHandleRequest
     then do
       acceptRequest
       ...

     else rejectRequest ...

main :: IO ()
main = do
  let settings = Warp.defaultSettings
        {settingsIntercept = WebSockets.intercept wsApp}

  Warp.runSettings settings httpApp
  return ()
于 2012-10-05T20:22:24.103 に答える