正在连接聊天服务器...,Clojure中的可扩展聊天服务器.存在和消息到达的问题黑白重新连接...

我正在尝试在Clojure中构建可扩展的聊天服务器.我正在使用http-kit,compojure和redis pub / sub在不同节点之间进行通信(扇出方法).服务器将使用websockets连接黑白客户端-服务器,并回退到长时间轮询.单个用户可以具有多个连接,以与浏览器中每个选项卡的一个连接聊天,并且应该将消息传递给所有连接.

所以基本上,当用户连接时,我将通道存储在具有随机uuid的原子中

{:userid1 [{:socketuuid "random uuid#1 for uerid1" :socket "channel#1 for userid1"}

{:socketuuid "random uuid#2" :socket "channel#2"}]

:userid2 [{:socketuuid "random uuid#1 for userid2" :socket "channel#1 for userid2}]}

消息被发布到websockets和长轮询通道的通用路由,消息结构看起来像

{:from "userid1" :to "userid2" :message "message content"}

服务器在:from和:to用户ID中找到原子中的所有通道,并将消息发送到各个用户的连接通道,同时还在Redis服务器上发布消息,连接节点在其中查找存储在其节点中的通道拥有原子并将消息传递给各个用户.

因此,我遇到的问题是如何正确实现状态.基本上,当通道断开连接时,http-kit会向您发送状态,状态可以是“服务器关闭”或“客户端关闭”,而我可以处理服务器断开连接(客户端将自动重新连接),但是断开连接时我遇到了问题从客户端发生,例如.用户导航到另一个页面,几秒钟后将连接.当客户端断开连接时,如何确定用户已脱机.我也担心长轮询模式下的消息到达黑白会重新连接(我的长轮询超时是30秒).

另外,请为上述架构提出一个良好的呈现机制.谢谢.

如果您需要更多信息,请发表评论.谢谢

编辑#1:

您能推荐有关在聊天服务器中实现在线状态的良好教程/材料吗,我似乎什么也找不到.

我当前的解决方案->我目前正在维护一个特定用户ID的已连接通道的全局计数和最后连接的时间戳,当用户断开连接时,计数会减少,并且会实施10秒钟的超时,这将检查用户是否已重新连接(即上次连接的戳记的使用时间为10秒,计数仍然为零),如果不是,则认为用户已脱机,您是否会推荐此解决方案?如果不是,则建议您采取任何改进或更好的方法.

另外请注意,我正在使用http-kit中的timer / scheduled-task,这些超时是否会对性能产生重大影响?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值