如何做到服务器向手机主动发送消息(轮询、长轮询、双工、半双工)
服务器主动向客户端发送消息
在我心中一直都有一个疑惑,我们在客户端开发中往往能碰到一种场景,需要服务器主动告诉客户端状态的改变。 例如我们使用使用手机扫码登录微信。手机扫码后,请求接口使用http协议告诉服务器扫码了,然后服务器需要主动通知电脑,用户扫码成功,登录成功。但是http协议又不能让服务端向客户端发送消息。知道我看到了对于轮询,长轮询的解释才恍然大明白。
轮询
不难想到解决方案之一是: 客户端一直请求服务端,获取状态的改变。在这个例子中便是手机隔一秒钟遍请求一次服务器,看到底又没有扫码成功。
长轮询
还有一种解决方案是只请求一次,请求超时的事件设置为一分钟,在一分中之内扫码,便可以得到响应。超时后重新进行请求。这也终于让我明白,为什么有时候扫码,会显示二维码过期。
websocket 协议
因为http协议是** 半双工协议。只能由客户端向服务端发送请求。如果想真正的让服务端向客户端发送请求就可以使用websocket协议,websocket协议是真正的全双工**协议。
单工
数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。
半双工
单工通信信道是单向信道,发送端和接收端的身份是固定的,发送端只能发送信息,不能接收信息
例如 http协议只能由客户端请求接口,之后服务端进行响应。客户端——>服务端,且不能同时进行
全双工
全双工通信又称为双向同时通信,即通信的双方可以同时发送和接收信息的信息交互方式
上述只是个人理解,如有错误,欢迎批评指正
发表评论