Angular2 + Laravel与实时和WebSockets
我build立了一个应用程序,我打算与Angular 2和laravel进行实时的战斗。 例如,你点击“攻击”button,你的对手看到他的生活实时下降。
我的应用程序构build于:
前端: Angular 2
后端: PHP Laravel 5.2
现在我正在寻找和学习我的实时战斗部分,我看到了不同的指南和教程:
- https://www.codetutorial.io/laravel-5-and-socket-io-tutorial/
- http://4dev.tech/2016/02/creating-a-live-auction-app-with-angular-2-node-js-and-socket-io/
第一个教程是关于如何使用Laravel 5和套接字io 。
第二个是如何在NODS JS和socket io上使用Angular 2 。
当我说实时,我的意思是两个用户看到屏幕上发生的相同的事情)
我的后端和前端是完全分开的,我没有安装NodeJS在我的应用程序的任何地方。
这两个用户都需要看到在我的应用程序的战斗中发生的行动,它需要通过我的laravel API,并通过我的Angular 2战斗组件
我的问题是 –
使用Angular2和Laravel 5.2实时应用程序(看起来websockets)的最佳方法是什么,以获得我想要实现的所需结果?
在这种情况下,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>" ); });
如果你打算使用websocket,那么似乎没有使用laravel,因为只有一个socket能够处理前端和后端之间交换的所有数据,所以如果你不介意改变你的引擎,可以试试Meteor, https://www.meteor.com/
对于您的用例的实时性,websockets绝对是一种可行的方式。 应该得到更新的玩家应该在同一个“房间”,所以你可以更容易地播放更改。 对于其他function,您可以使用websockets或常规API调用直接从您的客户端应用程序代码与您的api和套接字服务器之间的某种通信,例如通过Redis的后端。
TLDR:
- 所有的数据通过套接字,节点服务器进行api调用,并向活动播放器广播改变
- 直接使用API的应用程序,使用pub / sub队列foo来进行laravel和node之间的通信,以便将活动播放器的播放改变
选项1:
- Angular前端应用程序
- 设置websocket连接
- 添加foo游戏的触发器,它将通过套接字连接发送数据,并由nodeserver处理
- 只与套接字谈判
- 节点服务器
- 提供前端应用程序
- 处理sockets连接,每场比赛分割球员
- 处理套接字调用并调用laravel API来对数据进行突变
- 处理行动并向游戏X中的玩家广播改变
- Laravel REST API
- authenticationx
- 默认的CRUD foo
选项2:
- Angular前端应用程序
- 直接与api谈话
- 使用套接字来收听更新
- 节点服务器
- 提供前端应用程序
- 处理websocket数据
- 在队列上监听API发布的数据
- 通过套接字广播更改游戏x中的玩家
- Laravel REST API
- validation
- CRUD
- 突变x触发器在Redis或其他节点服务器可以/应该监听的队列中发布
我确信有更多的方法可以设置这个,你只需要决定你想要什么。 也许介绍Redis是你不想要的,在这种情况下你的节点应用程序将有更多的事情要做。 如果你想使用类似Redis的东西,你需要从你的前端应用程序进行API调用,或者select通过节点应用程序来完成,结合2个选项。
- Heroku应用程序使用generator-angular-fullstack失败构build
- 获得ngPrime为Angular 2工作
- Webstorm导入Angular 2的url问题
- 运行“npm start”由于错误而失败 – Angular2
- Karma:(SystemJS)XHR错误(404 Not Found)加载src / node_modules / angular2-jwt / angular2-jwt.js
- Angular 2的http请求在新系统上处于挂起/取消状态
- Angular2 – 在组件的OnInit方法中调用多个服务
- 安装Chrome个人资料的扩展程序 量angular器
- 我怎么做一个Ctrl +点击量angular器?