我构建了一个应用程序,我计划与Angular 2和laravel进行实时战斗。例如,你击中了#34;攻击"按钮,你的对手看到他的生活实时下降。
我的应用构建:
前端: Angular 2
后端: PHP Laravel 5.2
现在我正在搜索和学习我的实时战斗组件, 我看到了不同的指南和教程:
第一个教程是关于如何使用 Laravel 5和socket io 。
第二一个是如何使用 Angular 2与NODS JS和socket io 。
当我说实时时,我的意思是两个用户都看到屏幕上发生的同样事情)
我的后端和前端是完全分开的,我在我的应用程序的任何地方都没有设置NodeJS。
两个用户都需要在我的应用中看到战斗期间发生的动作,并且需要通过我的laravel API并通过我的Angular 2战斗组件显示
我的问题是 -
使用Angular2和Laravel 5.2获取所需内容的实时应用(似乎是websockets)的最佳方法是什么?
答案 0 :(得分:4)
在这种情况下,Laravel只是模板化并提供客户端文件,并充当客户端和socket.io服务器之间的接口。它实际上并没有充当socket.io服务器,我也不相信它。
所以是的,您仍然需要某些东西(节点)来托管socket.io服务器以通过PHP或其他方式与客户端进行交互。就个人而言,我完全跳过Laravel / PHP并且只使用带有koa / express /的节点来模拟你的客户端(html / js / css / etc)文件。感觉就像对我不必要的抽象。
socket.blade.php
下面的代码已经与实际的socket.io
服务器建立了连接,所以我不明白为什么通过PHP / Laravel进行HTTP POST的额外开销是一个好主意。也许是安全性,但你也可以使用实际的socket.io服务器处理它。
var socket = io.connect('http://localhost:8890');
socket.on('message', function (data) {
$( "#messages" ).append( "<p>"+data+"</p>" );
});
答案 1 :(得分:1)
对于用例的实时特性,websockets肯定是要走的路。应该获得更新的玩家应该在同一个“房间”,这样您就可以更轻松地广播更改。对于其他功能,您可以直接从客户端应用程序代码使用websockets或常规API调用后端,在api和套接字服务器之间进行某种通信,例如:通过Redis。
TLDR:
选项1:
选项2:
我确信有更多方法可以设置它,你只需要决定你想要什么。也许介绍Redis是你不想要的,在这种情况下你的节点应用程序将有更多的事情要做。如果你想使用像Redis这样的东西,你需要从你的前端应用程序进行API调用,或者选择通过节点应用程序进行调用,结合2个选项。
答案 2 :(得分:1)
如果你打算使用websockets,那么laravel的使用似乎就少了,因为只有一个套接字能够处理在前端和后端之间交换的所有数据,所以如果你不这样做的话。介意改变您的引擎,您可以尝试Meteor,https://www.meteor.com/