Как отправить данные с клиента на 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,'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.

11

Решение

Redis — это механизм хранения ключей / значений. Вы должны относиться к этому как к базе данных.

Клиент отправляет запрос веб-серверу, который получает этот запрос, и решает, что с ним делать. Для запросов, требующих обработки на стороне сервера, он передаст этот запрос «обработчику» на стороне сервера для обработки, в вашем случае, вероятно, PHP-FPM, который затем передает его демону PHP, который затем выполнит запрос.

Redis не может интерпретировать запрос таким образом. Поэтому вы должны перехватить запрос с помощью Laravel и затем отправить его в Redis. А не наоборот.

Если вы хотите, чтобы Laravel получил информацию от Redis, вы захотите использовать Redis ‘Pub / Sub Feature. Затем вы можете попросить Laravel подписаться на обновления Redis, получать обновления и сохранять данные или обрабатывать их так, как вы хотите.

phpredis lib поддерживает функцию pub / sub.

Вот пример реализации PHP с этой библиотекой.
https://xmeng.wordpress.com/2011/11/14/pubsub-in-redis-using-php/

4

Другие решения

Вы можете использовать вещание в Laravel для того же. Также вы можете транслировать между несколькими клиентами, используя шепот. Также в нем есть вещатель на основе Redis.

Для начала нужно включить его пакет в композитор.

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

Прием трансляции

Создание идентификатора сокета для echo [включается в заголовок как X-Socket-ID]

var socketId = Echo.socketId();

Убедитесь, что у вас установлено эхо

npm install --save laravel-echo pusher-js

Создать экземпляр эха

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 Broadcast Documentation

1

Я думаю, что этот учебник — то, что вы хотите:

Учебник по Laravel 5 и Socket.io

содержит руководство для клиентской и серверной части

и для ios

Вы могли бы использовать: Socket.IO-Клиент-Swift

проверьте это также: Socket.IO на iOS

0
По вопросам рекламы [email protected]