对于推送通知,是否必须使用websocket?

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

我正在制作一个应用程序,其中一个涉众键入一条消息,并实时广播给一个组的多个接收者

我在google上做了一些研究,我知道我需要使用WebSockets或Comet进行实时推送通知。WebSocket或Comet是否必须向用户发送大量通知

我的理解正确吗?有什么参考资料吗

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

HTTP请求是暂时的。客户端向服务器发出请求,服务器响应。HTTP请求非常适合从服务器请求信息的客户端。他们不太擅长服务器向客户机发送信息,因为客户机通常没有连接。有一些黑客和变通方法,客户端每隔一段时间“轮询”服务器,甚至服务器可能使用运行时间较长的请求来尝试模拟“推送”类型的系统,但它们充其量只是次优黑客

WebSocket是连续连接。客户端进行连接,并且只要双方愿意,连接就会保持在原位。这使得任何一方都可以随时向另一方发送消息。这意味着服务器可以随时将数据“推送”到客户端。WebSocket对于推式连接非常有效,推荐使用(这是WebSocket设计的主要目的之一)

Comet是一个库,最初是为了在WebSocket发明之前,以及在WebSocket得到广泛支持之前,使用HTTP尝试“黑客”或“模拟”推送而构建的。我想不出有什么理由想用Comet代替webSocket,除非你的浏览器太旧,以至于webSocket不受支持

因此,如果您试图对浏览器执行“实时服务器推送”,那么您必须拥有来自客户端的连续连接套接字,这意味着webSocket(或构建在webSocket之上的东西,如socket.io)

对于可以访问phone SDK的手机应用程序,可以使用操作系统内置的“推送”系统将一些消息从服务器推送到客户端。这与双向webSocket频道并不完全相同,但由于您询问了“推送通知”,Android和IOS中提供的OS推送服务也可以作为将通知从服务器推送到客户端的选项。以下是有关iOS通知和谷歌云消息的信息

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

下面是对服务器发送事件如何工作的一个很好的描述:服务器发送事件实际上是如何工作的

发表评论