scoket服务端如何设计的问题

诗和远方C 2019-06-17 04:19:50
最终目的是能在网页上实时显示某个产品是否在线,并达到网页点击事件发送数据到app,app根据不同数据 转发给产品,做相应操作。

产品是绑定用户,一个用户有多个产品,一个app客户端只可同时在线一个产品,当前登录网站的用户只可查看本用户下的产品是否在线。

我是这样想的,服务器一个list集合保存当前在线的app,以及在线的产品和这个产品隶属于哪个用户(去数据库查),一个list集合保存当前需要查询的网页客户端地址和用户信息,app端跟服务器用一个心跳机制(发送特定信息,回复特定信息),判断app端产品是不是在线,网页端跟服务器用一个心跳机制,判断网页端是否还是打开状态。

问题:
1.这设计思路对了没?还是应该怎么设计

2.这2个心跳机制是否可以去掉?
因为是要实时在网页更新app传过来的数据,在传输消息已经如此快的情况下,还需要心跳机制么
写个while循环,判断每个客户端最后一次发过来的消息的时间,超过x秒则默认下线取代心跳

大佬们指导指导
...全文
142 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kampoo 2019-06-17
  • 打赏
  • 举报
回复
1. 基本没问题,但可以优化,避免对服务器的轮询操作。网页访问服务器采用websocket,加一个信号量等待队列填充;app->server的心跳消息收到后,处理后填充队列,并触发信号量;websocket服务端收到信号,处理队列全部消息后进入等待状态;……
2. 保持连接的心跳机制不可少。即使做阻塞处理,但在复杂的网络条件下,socket有效而实际连接可能断开了。心跳机制是最有保障的,消息体最好是特定字节+时间戳(或消息序号),只有特定字节不可靠。
baidu_27549073 2019-06-17
  • 打赏
  • 举报
回复
很完美,可以这样搞
圣殿骑士18 2019-06-17
  • 打赏
  • 举报
回复
没有必要。既然你对app的使用有限制,这说明app的使用是有权限的,那做两个接口,app的登入和登出,你不就知道哪个app在使用了。
it_gz_xi 2019-06-17
  • 打赏
  • 举报
回复
对的,判断是否在线可以用心跳
hanghangz 2019-06-17
  • 打赏
  • 举报
回复
好难理.好难理.

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧