PHP MySQL socket.io получение сообщений

Я делаю приложение для личных сообщений

PHP-> MySQL

Я храню сообщения в базе данных mysql, и при необходимости их можно скачать.

Я новичок в socket.io и не знаю, как это сделать правильно.


Допустим, в одной чат-комнате находятся два пользователя.

userId   | nickName      | chatId   | 
---------|---------------|----------|
1        | "fred"        | 1        |
2        | "john"        | 1        |

Чаты:

chatId   | chatName      | 
---------|---------------|
1        | "coolChat"    |

// (а также у меня есть таблица для сообщений chat)

Когда пользователь отправляет сообщение, происходит следующее:

SendMessage.php:

$qry = $db->prepare('INSERT INTO chatMessages (chatId, userId, message) VALUES(:chatId, :userId, :message)');
$qry->bindParam(':chatId', $chatId, PDO::PARAM_INT);
$qry->bindParam(':userId', $userId, PDO::PARAM_INT);
$qry->bindParam(':message', $message, PDO::PARAM_STR);
$qry->execute();

if ($qry->rowCount() > 0) {

   // let's say I collected all the users in the same chatRoom:
   $chatRoomUsers = array(1, 2);

   // Successfully inserted into the database, should somehow
   // push the message with socket.io to another users in the same chatRoom
   for($i=0; $i<count($chatRoomUsers); $i++){
       // socket.push(toUserId: $chatRoomUsers[$i], inChatRoom: $chatId, message: $message);
   }

}

Файл сокета на данный момент:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io');

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

var sockets = {};

io.on('connection', function(socket){
  console.info('a user connected');
  socket.on('disconnect', function(){
    console.info('user disconnected');
  });

  socket.on('chat message', function(msg){
    io.emit('chat message', msg);

  });
});


http.listen(3000, function(){
  console.info('listening on *:3000');
});

var people = {};
socket.on('join', function(name){
  people[socket.id] = name;
  console.info(people);
});

Так есть ли способ отправлять сообщения только пользователям userId в той же чат-комнате?

Есть несколько способов сделать это. Но ваши вопросы - это способ слишком широкий, чтобы все это объяснить. Для этого потребуется написать полкниги. Кроме того, ваш вопрос не показывает ничего из того, что вы пробовали сами для достижения своей цели. Только то, что вы сделали, чтобы подготовиться к этому. По сути, если ваш вопрос начинается с: Как мне..?, SO - не то место, где задавать. Если ваш вопрос начинается с: Я пытаюсь выполнить ... Я пробовал это, не сработало, что пошло не так?, SO - это то, что вам нужно.

icecub 10.03.2018 16:35
stackoverflow.com/questions/23619015/… а также гугл для socket io private chat
iwex 10.03.2018 16:38

При этом: один из способов сделать это - добавить идентификатор поля в начале каждого сообщения и разделить строку сообщения на стороне сервера, чтобы она была вам доступна. Не пытайтесь создавать «настоящие чаты», вместо этого имейте только 1 комнату, где сообщения фильтруются на основе идентификатора ящика. Таким образом, все остальные сообщения остаются там, но просто невидимы, потому что у них другой идентификатор ящика.

icecub 10.03.2018 16:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
52
0

Другие вопросы по теме