Веб-сокеты, socket.io или другая альтернатива - PullRequest
0 голосов
/ 05 июля 2018

Я немного новичок в теме, связанной с сокетами, поэтому прошу прощения за любой тупой вопрос.

Я хотел бы сделать что-то вроде этого ... У меня есть гибридное приложение и веб-сайт, и я хотел, чтобы, когда я нажимал на кнопку в приложении, он показывал мне оповещение / уведомление на веб-сайте. Я читал о Socket io, и он выполняет работу на локальном хосте, но я хочу альтернативу, которая не использует сервер позади, так как я не могу запустить его с помощью CPANEL (к чему у меня есть доступ) Можно ли иметь прямое соединение между приложением и сайтом, когда я нажимаю кнопку?

Ответы [ 4 ]

0 голосов
/ 05 июля 2018

Хорошо, давайте сделаем это на 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

?>

Я не проверял это, поэтому, если что-то не так, дайте мне знать.

0 голосов
/ 05 июля 2018

Давайте разберем проблему на несколько частей, начиная с переноса в браузер, о чем вы и просите.

Веб-сокеты - это способ установить двунаправленное соединение между сервером и клиентом. Это стандарт, реализованный большинством современных браузеров. Socket.IO - это абстракция, похожая на веб-сокет, которая может использовать веб-сокеты или другие транспортные средства под капотом. Первоначально он был построен как своего рода полифилл, позволяющий отправлять сообщения через веб-сокеты или даже длительный опрос. Использование Socket.IO не дает вам никакой дополнительной возможности , чем у вас только с браузером, но предоставляет некоторые хорошие абстракции для "комнат" и тому подобное.

Если вы отправляете данные только с сервера на клиент, веб-сокеты не являются идеальным выбором. Для потоковой передачи данных в целом более подходящими являются 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 и может просто передавать данные (проверяя их и проверяя подлинность, конечно же).

0 голосов
/ 05 июля 2018

Вы можете использовать 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/

Надеюсь, это поможет

0 голосов
/ 05 июля 2018

Вы можете написать скрипт PHP, который имеет конечную точку POST / GET. Ваше приложение будет связываться с этой конечной точкой. Конечная точка должна обработать сообщение и записать его в базу данных. Ваш веб-сайт может затем опросить, чтобы увидеть, есть ли какие-либо новые записи, и показать что-то, если есть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...