4

OK、これはこのトピックの続きです:HaskellWebSocketsライブラリの公式例を実行する方法。ループ内のすべてのクライアント要求に応答するサーバーが必要です。

{-# LANGUAGE OverloadedStrings #-}

import Data.Char (isPunctuation, isSpace)
import Data.Monoid (mappend)
import Data.Text (Text)
import Control.Exception (fromException)
import Control.Monad (forM_, forever)
import Control.Concurrent (MVar, newMVar, modifyMVar_, readMVar)
import Control.Monad.IO.Class (liftIO)
import qualified Data.Text as T
import qualified Data.Text.IO as T
import Network.WebSockets

meow :: TextProtocol p => WebSockets p ()
meow = forever $ do
    msg <- receiveData
    sendTextData $ msg `T.append` ", meow."

app :: Request -> WebSockets Hybi00 ()
app _ = meow

main :: IO ()
main = runServer "0.0.0.0" 8000 app

今私はJavaScriptからそれを使おうとしています:

var socket;  
var host = "ws://localhost:8000";  
var socket = new WebSocket(host);  
    console.log("ready");  
    socket.onopen = function(){  
         console.log("open");  
         socket.send("cats do ");
    }  
    socket.onmessage = function(msg){  
         console.log("msg");  
    }  
    socket.onclose = function(){  
         console.log("close");  
    }  

ただし、接続はクライアントの起動直後に閉じられます(接続は準備ができていますが、開かれていません)。私は何か他のものを期待していました...

4

1 に答える 1

3

WebSocket接続の使用を開始する前に、リクエストを受け入れる必要があります。例えば

app :: Request -> WebSockets Hybi00 ()
app req = do
    acceptRequest req
    meow
于 2013-01-25T18:28:45.043 に答える