2017-09-06 6 views
2

워프/WAI 응용 프로그램에서 작동하지 않는 그것을 실행으로 나는 콘솔에 로그인 할 것으로 예상에 "에코 서버"를 작성했습니다 :터미널 IO 내가 WebSocket을 만지작있어

echo = Warp.run 3000 app 
    where 
    app = WS.websocketsOr 
     WS.defaultConnectionOptions 
     wsApp 
     httpApp 

    httpApp _ respond = do 
     put "HTTP Request Recieved" 
     respond $ Wai.responseFile 
     Http.status200 
     [] 
     "web/index.html" 
     Nothing 

wsApp :: WS.ServerApp 
wsApp pendingConn = do 
    conn <- WS.acceptRequest pendingConn 
    WS.forkPingThread conn 30 
    put "WebSocket Connection Open" 
    listen conn 

listen :: WS.Connection -> IO() 
listen conn = forever $ do 
    str <- WS.receiveData conn :: (IO Text.Text) 
    put $ Text.unpack str 
    WS.sendTextData conn str 

main :: IO() 
main = do 
    put "Echo WebSocket Running ..." 
    echo 

put str = hPutStrLn stdout str >> hFlush stdout 

당신이 할 수 보십시오, 플러시를 시도했습니다 stdout하지만 성공하지 못했습니다. 나는

$ ./echoServer 
Echo WebSocket Running ... 

하지만 더 이상 얻을 수 없다. 브라우저에서 "web/index.html"을 성공적으로로드하고 WebSocket에 대한 연결을 성공적으로 설정하여 사용하더라도 콘솔에서 아무런 피드백도받지 못합니다.

콘솔로 출력하려면 어떻게해야합니까?


라이브러리 버전 :

답변

2

위의 코드는 실제로에서 작동하지만 아무 일도 일어나지 않습니다! 이 질문은 불쾌한 캐시 무효화 오류의 결과이며 내 코드에는 오류가 아닙니다.

클라이언트 측 (먼저 Elm을 사용)을 작성하고 wss://echo.websocket.org을 가리 키도록 websocket을 하드 코딩하여 프런트 엔드를 테스트 할 수있었습니다. 나는 그 다음에 Elm이 만든 파일을 나에게 제공하는 백엔드를 얻었다. (그러나 여전히 wss://echo.websocket.org을 가리킨다.) 저의 실수를 깨닫고, 느릅 나무 스크립트를 localhost를 가리 키도록 변경하고 위에서 보았던 것처럼 백엔드에 일부 로깅을 추가했습니다.

그런 다음 서버를 다시 시작하고 브라우저에서 localhost : 3000을 가리켰습니다. 브라우저는 여전히 wss://echo.websocket.org (websocket 요청 없음)을 가리키는 캐시 된 사본 (HTTP 요청 없음)을로드했습니다.

프런트 엔드가 작동하는 것처럼 보였지만 백엔드는 로깅되지 않았습니다. 실제로 백엔드로 들어오는 요청은 전혀 없었습니다.

나는 오늘 저녁에 돌아 왔고 모든 것을 작동시킬 수 있는지, 그리고 처음에는 서버를 실행했을 때 거의 효과가 있었는지 확인하기 위해 코드를 망치기 시작했다. 그러나 나는 효과적인 변경을하지 않았다. 새로운 'include'라인. 캐시가 만료되었습니다. 큰 요령은 HTTP 요청이 모두 올바르게 기록된다는 것입니다. "왜 그런 요청이 달라졌 을까요?" 나는 나 자신에게 물었다. 그런 다음 캐싱이 계속되었고, 부실 캐시가 오늘 아침에 내가 본 모든 것을 설명 할 수 있다는 것이 나에게 타격을주었습니다.

이전에 이것을 인식하지 못하게 굴욕감을 느낀 것 외에는 모든 것이 현재 작동 중입니다.

컴퓨터 과학에는 캐시 무효화 및 이름 지정과 같은 두 가지 어려운 작업 만 있습니다. - Phil Karlton