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

时间:2018-07-05 13:18:13

标签: javascript jquery ajax

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

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

4 个答案:

答案 0 :(得分:2)

您可以考虑为此使用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/

希望有帮助

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

好的,让我们在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

?>

我尚未对此进行测试,所以如果出现问题,请告诉我。