NodeJS и PHP (Laravel) для горячего чата Socket.IO

В настоящее время у меня есть сайт, который я написал на PHP через Laravel framework. Я написал живой чат, используя nodeJS с Socket.IO и Экспресс, и теперь я хочу, чтобы он интегрировал его в мою уже написанную Веб-сайт Laravel. Проблема заключается в том, что чат должен находиться на главной странице, которая в настоящее время отображается в представлениях Laravel. В настоящее время я нахожусь на общем хостинге.

Вопрос: Каковы ваши наилучшие предложения по такой интеграции? Я знаю, что стек LAMP готов к работе в большинстве разделяемых доменов, но я совершенно не знаю, как мне заставить PHP (Laravel) и мой узел nodeJS работать вместе.

Что я пробовал:

  • Elephant.IO - У него еще не было большого успеха...

Ответ 1

решение прост (но найти НИКОГДА об этом в Интернете не было). Вам просто нужно включить файл socket.io JS в HTML-представление PHP, тогда файлы сокета socket.io JS подключаются к вашему серверу node.JS. Это отлично работает на localhost. Однако, если кто-то еще пытается войти в ваш чат извне, они будут испытывать ошибку "Запретный запрос на кроссдомен", потому что вы, вероятно, следовали за каким-то "руководством", как я, и ваше соединение socket.io в КЛИЕНТЕ

var socket = io.connect('localhost:8080');

вместо

var baseURL               = getBaseURL(); // Call function to determine it
var socketIOPort          = 8080;
var socketIOLocation      = baseURL + socketIOPort; // Build Socket.IO location
var socket                = io.connect(socketIOLocation);

// Build the user-specific path to the socket.io server, so it works both on 'localhost' and a 'real domain'
function getBaseURL()
{
    baseURL = location.protocol + "//" + location.hostname + ":" + location.port;
    return baseURL;
}

Код клиента PHP:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
</head>
<body>

  <!-- Wrapper-->
  <div id="wrapper">

    <!-- Chat: Input -->
    <div id="chat-input">

      <!-- Username -->
      <div class="username">
        <p id="username">John Doe</p>
      </div>

      <!-- Form -->
      <form action="">

        <!-- Input field -->
        <input type="text" class="chat_input-message" id="message" placeholder="Enter your message..." autocomplete="off" autofocus="on" />

        <!-- Button -->
        <button>Send</button>

      </form>
      <!-- END: Form -->
    </div>
    <!-- END Chat: Input -->

    <div id="chat-output">
      <div id="messages"></div>
    </div>

  </div>
  <!-- END: Wrapper -->

  <!-- Scripts -->
  <!-- Socket.IO -->
  <script src="../node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>
  <!-- jQuery -->
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <!-- Chat -->
  <script src="../public/js/chat.js"></script>
  <!-- End: Scripts -->

</body>
</html>

Серверный код node.JS не нуждается ни в каких настройках, забыть все о Redis или PHP (Elephant.IO, AJAX случайные инъекции, забыть о любых хаках). Он просто работает как волшебство.