tangguo

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

java

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

我正在制作一个应用程序,其中利益相关者键入一条消息,该消息实时广播到一个组的多个接收者。

我在Google上做了一些研究,我了解我需要使用WebSockets或Comet进行实时推送通知。WebSocket或Comet是向用户发送大量通知的必需项吗?

我的理解正确吗?有什么参考开始吗?


阅读 462

收藏
2020-10-20

共1个答案

小编典典

如果客户端是浏览器,则标准浏览器可以通过Ajax(例如http)请求或webSocket连接来连接服务器的仅有两种方式。因此,如果您希望客户从外界得到一些通知,则必须使用这两种机制之一。

HTTP请求是暂时的。 客户端请求服务器,服务器响应。HTTP请求非常适合客户端从服务器请求信息。它们不擅长服务器向客户端发送信息,因为通常客户端未连接。在某些黑客和变通办法中,客户端会按一定间隔“轮询”服务器,甚至服务器甚至会使用运行时间更长的请求来尝试模拟“推送”类型的系统,但充其量是次优的黑客。

webSocket是连续的连接。 客户端进行连接,并且只要双方都希望,连接就会保持原状。这样,任何一方都可以在需要时向另一方发送消息。这意味着服务器可以在需要时将数据“推送”到客户端。webSockets对于推送连接非常有效,因此建议使用(这是它们设计的主要目的之一)。

Comet是一个库,最初是为了使用HTTP在发明WebSockets之前以及随后得到广泛支持之前尝试“破解”或“模拟”推送而构建的。我不能认为没有理由要使用Comet而不是webSocket,除非您使用的旧浏览器不支持webSocket。

因此,如果您尝试对浏览器进行“实时服务器推送”,则必须从客户端获得一个连续连接的套接字,这意味着webSocket(或建立在webSocket之上的套接字(如socket.io))。

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

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

2020-10-20