关于服务端使用GatewayWorker向C#客户端推送消息流程及消耗问题?

发布于 2022-09-07 22:57:07 字数 426 浏览 15 评论 0

还没实际开发,流程是不是这样

  1. PC端通过Ip和端口连接上服务端socket,会获得一个client_id
  2. PC端拿着client_id请求服务端,服务端将获得的client_id和用户的uid绑定在一起生成 channel ,并记录在数据库中且返回给PC端,PC端在用户在线的时候就一直监听这个channel.
  3. 服务端要给主动推送消息的时候就从数据库查出该用户的channel,使用GatewayClient调用接口推送消息,当用户退出的时候清除掉从数据库清除掉channel

如果流程对的话,

  1. 当连接和退出的时候如果是大量用户,频繁读写数据库肯定会造成数据库的负担.
  2. 当很多用户在线的时候,都监听着socket,服务器会不会负担不起

如果流程不对的话,望指点.感激不尽!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

罗罗贝儿 2022-09-14 22:57:07

1、PC端通过ip端口连上GatewayWorker(GatewayWorker不用将client_id发到PC端)
2、PC端把自己的唯一标识假设是uid发给GatewayWorker
3、GatewayWorker利用Gateway::bindUid($client_id, $uid)将$client_id对应的socket与uid绑定
4、绑定后设置一个$_SESSION['uid']=$uid 记录$client_id对应uid
5、从此GatewayWorker要给某个PC端发送消息时直接用Gateway::sendToUid($uid, '消息内容')即可发送,不再关注client_id
6、GatewayWorker收到PC端的消息后可以利用$_SESSION['uid']来判别是哪个PC端发来的消息
7、剩下的就是自己的业务逻辑了

以上$uid是客户端的唯一标识,用来区分不同PC端的。

云归处 2022-09-14 22:57:07

可以再服务端和数据库之间加一层redis来缓存一部分流量。
目测你这种应用的PC端可能会频繁的连接,端口,再连接这种操作,建议用redis来缓存client_id和channel等数据。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文