douna1892 2018-10-23 14:46
浏览 72
已采纳

当其中之一关闭时交换websocket连接

Using gorilla/websocket I'm connecting to some websocket (wss) endpoint and listening messages (only reading, not writing - this is important). This endpoint is always forcing closing connections after 10 minutes. Handling connection closing and reconnect will probably cause some incoming messages lost. How to handle connection in this case?

My suggestion is to keep pool of connections (2 connections or more). When first connection is being closed we can start using another (already connected) connection and start preparing new connection (or just reconnect). What do you think? Any drawbacks? "Swap" connections means stop using one gorouting and switch to another? Any ideas?

Important to note:

  • Endpoint is just broadcasting messages to all connections. No personalized messages, no authentification, no session-specific state etc.
  • Just reading, no writing at all.
  • 写回答

1条回答 默认 最新

  • douwei1128 2018-10-23 21:00
    关注

    If the messages have ids (they should), you can listen for them on several goroutines which reconnect if needed. The goroutines can forward the messages via a channel to a filter goroutine which only forwards unique messages, e.g. keep a map using seen message ids as keys. The map can be pruned periodically so it doesn't accumulate ids which are too old and no longer relevant.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用