加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如果尝试写入不再存在的客户端,远程actor框架会做什么

发布时间:2020-12-16 19:04:48 所属栏目:安全 来源:网络整理
导读:我有一个使用远程执行器框架与多个客户端通信的服务器.如 this question年所述,我无法跟踪客户何时消失.因此,我的服务器仍然尝试向不存在的客户端发送消息. 这是一个问题吗? (我没有看到任何异常被抛出 – 但我认为如果我的服务器是长期存在会有内存问题)
我有一个使用远程执行器框架与多个客户端通信的服务器.如 this question年所述,我无法跟踪客户何时消失.因此,我的服务器仍然尝试向不存在的客户端发送消息.

这是一个问题吗? (我没有看到任何异常被抛出 – 但我认为如果我的服务器是长期存在会有内存问题)
>如何检测到一个消息正在发送给客户端不再听? (如果我想实现某种连接清理)

解决方法

好的,我会冒险的东西在这里.

免责声明:尽管您将在下面阅读,您可能要start here.

我不熟悉斯卡拉,但它使用类似的原则对Erlang的,我觉得有点舒适.但是,令我困惑的是你的问题,与此无关.但是更多的是与您似乎正在建立的客户端 – 服务器关系.

根据定义,服务器不会继续向客户端发送消息,除非它收到请求.也就是说,服务器actor类应该在检查接收到的消息的情况下被构建(不一定总是),并相应地进行操作.因此,在这种情况下,客户端是现有的,服务器不应该担心它,而是通常发送其回复消息,因为客户端只是通过请求来感知其存在.

因此,如果您的服务器仍然尝试向客户端发送消息,尽管这些消息已被关闭,但在我看来,尽管没有收到请求,但是它仍然尝试发送消息.这在客户端 – 服务器关系的上下文中是根本错误的.服务器只能根据请求作出反应.否则它承担客户的角色.

无论如何,您可以(并且您应该)定义任何客户端 – 服务器对话的结束.这将有助于释放资源并结束已建立的连接.为此:

>您的客户端actor应该向服务器发送一条停止消息,并以执行actor类的任何退出函数scala终止其执行.
>收到停止消息时,服务器角色不应答复客户端.相反,它应该执行其清理(如果有的话),并终止与客户端actor类似的执行.

这样,您可以确保所有参与者的正确终止以及资源的正确释放.

我希望这有所帮助.不幸的是我不熟悉scala本身.否则我可以引入一些代码.但上述链接应该有帮助,希望.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读