推送通知| websocket是强制性的吗?

Joh*_*nky 27 html javascript php push-notification websocket

我在服务器端有PHP,在客户端有HTML和javascript.

我正在创建一个应用程序,其中一个利益相关者键入一个实时广播给一个组的多个接收者的消息.

我在谷歌做了一些研究,我明白我需要使用WebSockets或Comet进行实时推送通知.是否必须使用WebSocket或Comet向用户发送群发通知?

我的理解是否正确?任何引用都以?开头?

jfr*_*d00 48

如果客户端是浏览器,那么标准浏览器连接到服务器的唯一两种方式是通过Ajax(例如http)请求或webSocket连接.因此,如果您希望客户端收到来自外部世界的通知,则必须使用这两种机制中的一种.

HTTP请求是暂时的. 客户端发出服务器请求,服务器响应.HTTP请求非常适合客户端请求来自服务器的信息.他们不太擅长服务器向客户端发送信息,因为通常客户端没有连接.有一些黑客和解决方法,客户端在某个时间间隔内"轮询"服务器甚至服务器使用较长的运行请求来尝试模拟"推送"类型系统,但它们最好是次优的黑客攻击.

webSockets是连续的连接. 只要双方都想要,客户端就会连接并保持连接.这允许任何一方能够随时向另一方发送消息.这意味着服务器可以随时"推送"数据到客户端.webSockets对推送连接很有效,建议使用(这是他们设计的主要内容之一).

Comet是一个最初构建的库,用于在webSockets发明之前使用HTTP来尝试"破解"或"模拟"推送,然后才被广泛支持.我想没有理由为什么人们想要使用Comet而不是webSocket,除非你有这么老的浏览器,不支持webSocket.

因此,如果您尝试对浏览器执行"实时服务器推送",那么您必须从客户端连续连接套接字,这意味着webSocket(或者像socket.io这样构建在webSocket之上的东西).

对于可以访问手机SDK的手机应用程序,您可以使用操作系统内置的"推送"系统将一些消息从服务器推送到客户端.这与双向webSocket频道不完全相同,但由于您询问了"推送通知",因此Android和IOS中可用的操作系统推送服务也可以作为从服务器推送到客户端的通知的选项.以下是有关iOS通知Google Cloud Messaging的信息

截至2016年,还可以在除Microsoft浏览器(Edge或IE中尚不支持)之外的所有现代浏览器中使用服务器发送的事件将数据从服务器推送到客户端.这是一个浏览器兼容性表.服务器发送的事件使用持久的HTTP连接,特殊的MIME类型和支持客户端,以便能够随时从服务器向客户端发送事件.与webSockets不同,服务器发送的事件只是一种方式(从服务器到客户端).然后,客户端将使用传统的Ajax调用,以便能够将数据发送到服务器(而webSocket数据可以通过相同的webSocket连接以任一方式发送).

以下是服务器发送事件如何工作的良好描述:服务器发送的事件如何实际工作?