Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Web套接字、socket.io或其他替代_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript Web套接字、socket.io或其他替代

Javascript Web套接字、socket.io或其他替代,javascript,jquery,ajax,Javascript,Jquery,Ajax,我对套接字相关的问题有点陌生,所以我很抱歉有任何愚蠢的问题 我想这样做…我有一个混合应用程序和一个网站,我想当我点击应用程序上的按钮时,它会在网站上显示提醒/通知。我读过关于Socket io的文章,它在localhost上运行,但我想要一个不使用后台服务器的替代方案,因为我无法使用CPANEL(我可以访问的)运行它 当我单击按钮时,是否可以像“直接”连接一样从应用程序连接到站点?您可以编写一个具有POST/GET端点的PHP脚本。您的应用程序将与此端点通信。端点需要处理消息并将其写入数据库。然

我对套接字相关的问题有点陌生,所以我很抱歉有任何愚蠢的问题

我想这样做…我有一个混合应用程序和一个网站,我想当我点击应用程序上的按钮时,它会在网站上显示提醒/通知。我读过关于Socket io的文章,它在localhost上运行,但我想要一个不使用后台服务器的替代方案,因为我无法使用CPANEL(我可以访问的)运行它
当我单击按钮时,是否可以像“直接”连接一样从应用程序连接到站点?

您可以编写一个具有POST/GET端点的PHP脚本。您的应用程序将与此端点通信。端点需要处理消息并将其写入数据库。然后,您的网站可以轮询以查看是否有任何新条目,并显示一些内容。如果有,您可以编写一个具有POST/GET端点的PHP脚本。您的应用程序将与此端点通信。端点需要处理消息并将其写入数据库。然后,您的网站可以投票查看是否有任何新条目,如果有,则显示一些内容。让我们将问题分解为几个部分,从传输到浏览器开始,因为这就是您要问的问题

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

如果只从服务器向客户端发送数据,Web套接字不是理想的选择。对于一般的数据流,Fetch API和ReadableStream更合适。然后,您可以建立一个正常的HTTP连接。但是,您要查找的是事件样式的数据,其中有服务器发送的事件(SSE)。基本上,您在客户机上实例化一个EventSource对象,指向服务器上的URL。客户端自动维护连接,必要时重新连接。它还能够同步到流中的一个点,向服务器提供最后接收到的消息,以便客户端能够赶上当前时间


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

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

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

如果只从服务器向客户端发送数据,Web套接字不是理想的选择。对于一般的数据流,Fetch API和ReadableStream更合适。然后,您可以建立一个正常的HTTP连接。但是,您要查找的是事件样式的数据,其中有服务器发送的事件(SSE)。基本上,您在客户机上实例化一个EventSource对象,指向服务器上的URL。客户端自动维护连接,必要时重新连接。它还能够同步到流中的一个点,向服务器提供最后接收到的消息,以便客户端能够赶上当前时间


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

< P>您可以考虑使用FixBase: 在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);
  // ...
});
链接:


希望它有助于

你可以考虑使用FixBase: 在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);
  // ...
});
链接:


希望它有帮助好吧,让我们用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

?>


我还没有测试过这个,所以如果有什么问题,请告诉我

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

?>


我还没有测试过这个,所以如果有什么问题,请告诉我

如果没有服务器,你可能就完蛋了。当然,你可以把东西发到网站上。但是,您无法绕过实现某种验证和管理请求的服务器。@i.terrable因此,最好的方法是搜索如何承载/运行服务器,例如Socket io?wel