如何做到服务器向手机主动发送消息(轮询、长轮询、双工、半双工)

如何做到服务器向手机主动发送消息(轮询、长轮询、双工、半双工)

服务器主动向客户端发送消息

在我心中一直都有一个疑惑,我们在客户端开发中往往能碰到一种场景,需要服务器主动告诉客户端状态的改变。 例如我们使用使用手机扫码登录微信。手机扫码后,请求接口使用http协议告诉服务器扫码了,然后服务器需要主动通知电脑,用户扫码成功,登录成功。但是http协议又不能让服务端向客户端发送消息。知道我看到了对于轮询,长轮询的解释才恍然大明白。

轮询

不难想到解决方案之一是: 客户端一直请求服务端,获取状态的改变。在这个例子中便是手机隔一秒钟遍请求一次服务器,看到底又没有扫码成功。

长轮询

还有一种解决方案是只请求一次,请求超时的事件设置为一分钟,在一分中之内扫码,便可以得到响应。超时后重新进行请求。这也终于让我明白,为什么有时候扫码,会显示二维码过期。

上述两种方式如果一直进行,无疑都会造成资源的浪费。因此,我们可以设置一个最长响应时间。这应该也就是有时候如果不及时扫描二维码。二维码会过期的原因。需要手动刷新二维码重新开始轮询。不然便会造成资源的浪费。

WebSocket 协议

因为http协议是** 半双工协议。只能由客户端向服务端发送请求。如果想真正的让服务端向客户端发送请求就可以使用websocket协议,websocket协议是真正的全双工**协议。

上面提到了 半双工 全双工 通过例子也不难理解这两个名词的意思,还有个单工我们也一并拓展解释一下

单工

数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。

半双工

单工通信信道是单向信道,发送端和接收端的身份是固定的,发送端只能发送信息,不能接收信息
例如 http协议只能由客户端请求接口,之后服务端进行响应。客户端——>服务端,且不能同时进行

全双工

全双工通信又称为双向同时通信,即通信的双方可以同时发送和接收信息的信息交互方式

上述只是个人理解,如有错误,欢迎批评指正

版权声明:文章为原创文章,转载请注明出处!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值