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

Php 如何将数据从客户端发送到redis,然后再发送到laravel,php,node.js,laravel,redis,node-redis,Php,Node.js,Laravel,Redis,Node Redis,我正在使用laravel和redis进行实时聊天。我可以从我的laravel触发事件,并将该数据接收到客户端 我的问题是如何从客户端发送一些东西,然后将其接收到redis并传递给laravel 例如,如何检查用户是否已阅读聊天信息 代码: var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require(

我正在使用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,'x.x.x.x');

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-FPM会将该请求传递给PHP守护进程,然后PHP守护进程将执行该请求

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

如果您试图让Laravel从Redis获取信息,您需要使用。然后,您可以让Laravel订阅Redis更新,获取更新,并根据需要持久化或处理数据

支持发布/订阅功能

下面是一个使用该库的PHP实现示例。

同样,您也可以利用Laravel中的广播功能。您还可以使用whisper在多个客户端之间进行广播。还有一家基于redis的广播公司

首先,您需要在composer中包含它的包

composer require pusher/pusher-php-server "~3.0"
在app/broadcasting.php中配置凭据

'options' => [
'cluster' => 'eu',
'encrypted' => true
],
您还需要配置广播队列

发送广播

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

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();
确保已安装echo

npm install --save laravel-echo pusher-js
创建echo实例

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
    });

我认为本教程正是您想要的:

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

而ios呢 您可以使用:


同时检查此项:

您应该使用AJAX请求进行异步客户端到服务器更新。您上次读了我的说明吗?是的,我读了,为什么您无法从客户端向服务器发送请求?