限制与服务器

时间:2016-02-10 13:50:38

标签: sockets haskell websocket server haskell-snap-framework

我想限制与websocket服务器的连接。即1.新客户将老客户踢出去。

这有点代表了我想做的事情。取messages中的内容并通过websocket发送。如果另一个客户端连接或浏览器刷新(这应该关闭旧连接,但由于某种原因),突然有2个连接,只有每一个消息在新客户端接收。

我使用snap框架。

createServer = forkIO $ httpServe defaultConfig app

app = route [("/", runWebSocketsSnap handler)]

handler pending = do
    connection <- acceptRequest pending
    loop connection

loop connection = do
    msg <- takeMVar messages
    sendTextData connection msg

{-# NOINLINE messages #-}
messages = unsafePerformIO newEmptyMVar

sendMessage = putMVar messages

1 个答案:

答案 0 :(得分:1)

我在这里看到两个不同的问题:

  1. 如何限制连接数,因此最多同时有N个客户端;

  2. 确保浏览器刷新后旧连接不会永久存在;

  3. 我认为你的意思是#2。在这种情况下,您应该检查连接是否存在。最好的方法是定期ping客户端,例如使用forkPingThread

    如果您确实需要#1,那么您应该与当前客户端的MVar建立共享ThreadId。当新客户端连接时,只需kill旧客户端。