用于Socket.IO实时聊天的nodeJS和PHP(Laravel)集成

目前我有一个网站,我通过Laravel框架写在PHP上。 我用Socket.IOExpress写了一个使用nodeJS的实时聊天,现在我想要做的就是将它集成到我已经写好的Laravel网站中。 问题是聊天必须在主页面,这是目前由Laravel的意见。 目前我正在共享主机上。

问题:这种整合最好的build议是什么? 我知道LAMP堆栈已经在大多数共享域中准备好了,但我完全不知道如何让PHP(Laravel)和我的nodeJS聊天工作在一起。

我已经尝试过的事情:

  • Elephant.IO – 没有任何大的成功,但…

这个解决scheme很简单(但是在网上找不到任何关于它的东西)。 您只需将您的socket.io JS文件包含在PHP的HTML视图中,然后将socket.io JS文件连接到您的node.JS服务器。 这在localhost上运行得很好。 但是,如果其他人试图从外部login您的聊天,他们将遇到“禁止跨域请求”错误,这是因为您可能已经跟随了像我这样的一些“指南”,而您的CLIENT中的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随机注入,忘记任何黑客)。 它只是一个魔术。