2881099 / FreeIM

.NETCore websocket 实现简易、高性能、集群即时通讯组件,支持点对点通讯、群聊通讯、上线下线事件消息等众多实用性功能.
MIT License
1.42k stars 418 forks source link

是否考虑添踢客户端下线方法呢 #5

Open Tim1104 opened 4 years ago

Tim1104 commented 4 years ago

就想再API端踢人下线。 Android 当APP 运行再后台的时候网络会断开。当APP 运行到前台来的时候怎么自动重连 老大求解

2881099 commented 4 years ago

断开了后重新连接一次

2881099 commented 4 years ago

这个在客户端做?

Tim1104 commented 4 years ago

怎么踢人下线

Tim1104 commented 4 years ago

API端

2881099 commented 4 years ago

https://github.com/2881099/im/blob/master/ImCore/ImServer.cs 看看94行,112行代码

94行是上线,112行是下线

2881099 commented 4 years ago

你是要告知他们下线了,还是自己下线。

如果自己下线,断开websocket链接即可。

如果告知他们,我下线了,应该用用户状态表示,判断用户是否在线:imcore为上线,并且用户状态是a。当切换为后台运行的时候,把用户状态改为b,当切换进来的时候,把用户状态改为a。改变用户状态就是提交一个webapi接口。

Tim1104 commented 4 years ago

我的想法是ImHelper 里面是否可以强制让client 下线。然后就可以触发下线事件

2881099 commented 4 years ago

我看了一下,ImHelper 如果想实现物理将他人踢下线,其实也是一个 SendMessage 的过程。

如: ImHelper.SendMessage(目标用户, "SYS_DOWN") ImServer 内处理一下该消息,当收到 SYS_DOWN 消息时,将 socket 关闭。https://github.com/2881099/im/blob/master/ImCore/ImServer.cs 142 行代码

缺点:安全性需要加强,防止任何用户都能发送该消息。

这块代码我就不扩展了,提供上述解决思路,可以下载源码修改尝试。

Tim1104 commented 4 years ago

感谢你的回复。我打算用在我的生产应用上面。不知道你有没有用在商业环境上面。是否可以你的微信或者qq 。我的微信 18938792061

2881099 commented 4 years ago

有,这套用几年,在多个项目上