繁体   English   中英

Web套接字,socket.io或其他替代方法

[英]Web sockets, socket.io or other alternative

我在套接字相关主题上还是新手,所以对任何愚蠢的问题感到抱歉。

我想做这样的事情...我有一个混合应用程序和一个网站,我希望当我单击应用程序上的按钮时,它可以向我显示网站上的警报/通知。 我读到有关Socket io的信息,它在localhost上完成了工作,但是我想要一个不使用后台服务器的替代方法,因为我无法使用CPANEL(我可以访问)运行它。当我单击按钮时,是从应用程序到站点的“直接”连接?

您可以考虑为此使用Firebase:

在您的JavaScript中:

// execute the following script on click
importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-messaging.js');

// Initialize the Firebase app in the service worker by passing in the
// messagingSenderId.
firebase.initializeApp({
  'messagingSenderId': 'YOUR-SENDER-ID'
});

// Retrieve an instance of Firebase Messaging so that it can handle background
// messages.
const messaging = firebase.messaging();
messaging.send({data: "your data if you want to send"}).then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

// similarly, on your browser:
messaging.onMessage(function(payload) {
  console.log('Message received. ', payload);
  // ...
});

链接: https//firebase.google.com/docs/

希望能帮助到你

让我们将问题分解为几个部分,从传输到浏览器开始,这就是您要问的问题。

Web套接字是在服务器和客户端之间建立双向连接的一种方式。 这是大多数现代浏览器都实现的标准。 Socket.IO是类似于Web套接字的抽象,可以在后台使用Web套接字或其他传输方式。 它最初是作为一种polyfill构建的,它允许通过Web套接字甚至长轮询发送消息。 与仅使用浏览器相比,使用Socket.IO不会提供任何其他功能 ,但是它确实为“房间”等提供了一些不错的抽象。

如果仅将数据从服务器发送到客户端,则Web套接字不是理想的选择。 通常,对于数据流而言,Fetch API和ReadableStream更合适。 然后,您可以建立普通的HTTP连接。 但是,您要查找的是事件样式的数据,并且有服务器发送的事件(SSE)。 https://developer.mozilla.org/zh-CN/docs/Web/API/Server-sent_events/Using_server-sent_events基本上,您在客户端上实例化了一个EventSource对象,该对象指向服务器上的URL。 客户端会自动维护连接,并在必要时重新连接。 它还能够同步到流中的某个点,向服务器提供接收到的最后一条消息,以便客户端可以捕获当前时间。

现在,您的服务器端点如何知道何时发送此数据以及发送什么? 理想情况下,您将使用某种发布/订阅系统。 这些功能内置在Redis中,通常用于此功能。 (还有其他一些,如果您由于某些原因不喜欢Redis。)基本上,当服务器从应用程序接收到某些消息时,该应用程序会将消息“发布”到特定的频道,所有“订阅者”都将收到该消息。 。 您的服务器将是EventSource,并且可以简单地中继数据(验证数据和进行身份验证)。

您可以编写一个具有POST / GET端点的PHP脚本。 您的应用程序将与此端点进行通信。 端点需要处理该消息并将其写入数据库。 然后,您的网站可以进行轮询以查看是否有任何新条目,并显示是否有新条目

好吧,让我们在PHP中进行操作。 这只是最基本的例子。 只需将其放在某个地方,然后从您的应用程序链接到脚本即可。

<?php   

 function requestVars($type = 'REQUEST'){

   if($type == 'REQUEST')
      $r = $_REQUEST;
   elseif($type == 'POST')
      $r = $_POST;
   elseif($type == 'GET')
      $r = $_GET;

   $ret = array();

   foreach($r as $r1 => $r2)
     $ret[$r1] = $r2;

  return $ret;   
}

$vars = requestVars(); //get variables from request
echo $vars['var1'];   // var1 is what comes in from the client

?>

我尚未对此进行测试,因此如果出现问题,请通知我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM