2016-02-10 143 views
0

我想限制连接到websocket服务器。即为1.新客户踢出老客户。限制连接到服务器

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

我为此使用快照框架。

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

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

  1. 如何限制连接数,所以在同一时间最多N个客户端;

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

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

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