如何从客户端发送数据到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