Пинг-понг с Haskell и Thrift застревает

Я пытаюсь сделать простой пинг-понг, используя Haskell и Thrift. Однако он делает только одно повторение, а затем застревает. Я предполагаю, что проблема заключается в (не) правильном использовании Thrift, а не в Haskell. Наверное что-то не правильно прошивается. Есть ли кто-нибудь с опытом работы с Thrift, который мог бы помочь мне сделать обоснованное предположение о том, как это исправить?

Сервер:

echorequest :: TXT
echorequest = TXT {
    f_TXT_anytxt = Just "Ping"
    }

echoreply :: TXT
echoreply = TXT {
    f_TXT_anytxt = Just "Pong"
    }

serverFunc :: a -> (BinaryProtocol Handle, BinaryProtocol Handle)
              -> IO Bool
serverFunc a (h1,h2) = do
  let t1 = getTransport h1
  dat <- read_TXT h1
-- the following two lines are only for debugging
  putStrLn "Recieved data:"
  print dat
  write_TXT h1 echoreply
  tFlush t1
-- the following line is for debugging
  putStrLn "Data written"

  return False


main :: IO ()
main = do
   runBasicServer () serverFunc 4390
   putStrLn "Server stopped"

Клиент:

main :: IO ()
main = do
  h <- connectTo "127.0.0.1" $ PortNumber 4390
  let proto = BinaryProtocol h
  putStrLn "Client started"
  let tryOnePing c i = do
      write_TXT proto echorequest
      putStrLn "ping sent"
      tFlush h
      w <- read_TXT proto
      putStrLn "pong received"
      return $ if w == echoreply then c+1 else c
  c <- foldM tryOnePing 0 [0 .. 1000]
  tClose h
  print (c, 10000 - c)
27
задан hammar 23 November 2011 в 17:28
поделиться

1 ответ

Ваша проблема в том, что вы возвращаете False с serverFunc. Haskell будет зацикливаться, пока вы не вернете false (по вашему коду, только один раз)

http://hackage.haskell.org/packages/archive/thrift/0.6.0/doc/html/src/ Бережливость-Server.html # линия-65

1
ответ дан 28 November 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: