Warp Wai WebSockets拦截

时间:2012-11-14 20:00:12

标签: haskell yesod

import Network.Wai.Application.Static (staticApp, defaultWebAppSettings)
import Network.Wai.Handler.WebSockets (intercept)
import Network.Wai.Handler.Warp (runSettings, defaultSettings, 
                                 settingsIntercept, settingsPort)

main :: IO ()
main = do
    let s = defaultSettings {settingsPort=9160, settingsIntercept=intercept app}
    runSettings s $ staticApp $ defaultWebAppSettings "www"

1)我想知道的是,warp是否可以区分同一端口上的websocket请求和静态请求,以防止仅根据请求运行静态或拦截应用程序的开销。

http://hackage.haskell.org/packages/archive/wai-websockets/1.3.1/doc/html/src/Network-Wai-Handler-WebSockets.html

2)上面的源文件使用管道,这是否意味着对我的websocket receiveData使用严格的ByteString是安全的,而不必担心可能会溢出我的内存的大量传入数据或者我应该使用惰性ByteString吗?

请注意,您不能像http chunked transfer encoding那样对websocket进行分块。

1 个答案:

答案 0 :(得分:1)

  1. 如果收到websocket请求,则永远不会调用应用程序本身,并且您的websocket处理程序将立即接管。

  2. 如果没有看到您的代码,就无法保证您没有阅读过多的信息。但 可以像你描述的那样使用严格的ByteString。