如何从客户端发送数据到redis,然后到laravel

我正在使用laravel和redis进行实时聊天。 我可以从我的laravel发起事件,并将这些数据接收到客户端。

我的问题是我怎么能从客户端发送的东西,然后接收到它redis并将其传递给laravel

例如,我如何检查用户是否已经阅读聊天消息。

代码:

var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require( 'socket.io' ).listen( server ); var redis = require('redis'); var port = process.env.PORT || 8888; server.listen(port,'xxxx'); io.on('connection', function (socket) { console.log("Connected"); }); var redisClient = redis.createClient(); redisClient.psubscribe(['get_message','read_message']); redisClient.on("pmessage", function(channel, pattern, message) { console.log(channel); // i can see get_message on this line in console but not read_message }); //Also tried this io.on('read_message', function (socket) { console.log(socket); }); //Also this redisClient.on('read_message', function (socket) { console.log(socket); }); redisClient.on('disconnect', function() { console.log("Disconnected"); redisClient.quit(); }); 

注意:我从iOS应用程序发出数据。

Redis是一个关键/价值存储引擎。 你应该像数据库一样对待它。

客户端发送一个请求到一个接收这个请求的web服务器,并决定如何处理它。 对于需要服务器端处理的请求,它会将请求传递给服务器端的“引擎”进行处理,在您的情况下,可能是PHP-FPM,然后将其传递给PHP守护进程,然后执行请求。

Redis无法以这种方式解释请求。 因此,您必须通过Laravel拦截请求,然后将其发送给Redis。 而不是相反。

如果您试图让Laravel从Redis获取信息,则需要使用Redis的pub / subfunction 。 然后,您可以让Laravel订阅Redis更新,获取更新并坚持或处理您想要的数据。

phpredis lib支持pub / subfunction。

这是一个使用该lib的PHP实现的例子。 https://xmeng.wordpress.com/2011/11/14/pubsub-in-redis-using-php/

你可以利用Laravel中的广播。 您也可以使用耳语在多个客户端之间进行广播。 另外还有一个Redis的广播公司。

首先,您需要将其包装包含在composer php中。

 composer require pusher/pusher-php-server "~3.0" 

在app / broadcasting.php中configuration凭据

 'options' => [ 'cluster' => 'eu', 'encrypted' => true ], 

您还需要configuration广播队列。

发送广播

 event(new ShippingStatusUpdated($update)); //Broadcasts to everyone, avail to working scope as well broadcast(new ShippingStatusUpdated($update));//Broadcasts only to others 

接收广播

实例化echo的套接字ID [包含在头中作为X-Socket-ID]

 var socketId = Echo.socketId(); 

确保你已经安装了回声

 npm install --save laravel-echo pusher-js 

创build回显实例

 import Echo from "laravel-echo" window.Echo = new Echo({ broadcaster: 'pusher', key: 'your-pusher-key' }); 

听事件

 Echo.channel('orders') .listen('OrderShipped', (e) => { console.log(e.order.name); }); 

向其他连接的客户端广播一个事件,而不打你的Laravel应用程序

 Echo.channel('chat') .whisper('typing', { name: this.user.name }); 

Laravel广播文档

我认为这个教程是你想要的:

Laravel 5和Socket.io教程

它包含客户端和服务器端的教程

和ios

你可以使用: Socket.IO-Client-Swift

请检查这一点: iOS上的Socket.IO