我想限制与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
答案 0 :(得分:1)
我在这里看到两个不同的问题:
如何限制连接数,因此最多同时有N个客户端;
确保浏览器刷新后旧连接不会永久存在;
我认为你的意思是#2。在这种情况下,您应该检查连接是否存在。最好的方法是定期ping客户端,例如使用forkPingThread。
如果您确实需要#1,那么您应该与当前客户端的MVar
建立共享ThreadId
。当新客户端连接时,只需kill旧客户端。