Я пытаюсь написать программу чата с новым API событий, отправленных сервером, однако у меня возникли проблемы с выяснением того, как отправлять разным пользователям разные события. Поскольку весь код происходит из одного PHP-файла, я не уверен, как лучше всего отправлять только определенные события каждому пользователю. Любая помощь, которую вы можете оказать, будет принята с благодарностью. (Я работаю в PHP и Javascript)
Отправленные сервером события с несколькими пользователями
comment
Какую вещь вы хотите отфильтровать, кто что получает? Без кода вообще мы не сможем помочь
- person Ian   schedule 19.04.2013
comment
Я только что работал над некоторыми тестами, чтобы понять API, прежде чем начать работать над программой чата. Мне нужно контролировать, кто получает уведомление, когда сервер получает новое сообщение. Я уверен, что это основное, но я довольно смущен...
- person   schedule 19.04.2013
comment
Что ж, если это чат-программа, у вас должна быть какая-то реализация чатов и того, в какой комнате находится пользователь. Исходя из этого, вы должны иметь возможность отправлять сообщения пользователям в чате.
- person Ian   schedule 19.04.2013
comment
Да, но мне интересно, как вы различаете эти комнаты (я не хочу писать разные наборы кода для каждой из них)
- person   schedule 19.04.2013
comment
Реальный вопрос stackoverflow.com/questions/15713080/
- person Mawg says reinstate Monica   schedule 16.02.2017
Ответы (1)
Допустим, ниже приведен код sender.php (один файл php)
echo "event: ping\n";
$msg1="This is first user";
echo 'data: {"msg": "' . $msg1 . '"}';
echo "\n\n";
echo "event: notify\n";
$msg2="This is second user";
echo 'data: {"msg": "' . $msg2 . '"}';
echo "\n\n";
Код javascript первого пользователя будет следующим
var evtSource = new EventSource("sender.php");
evtSource.addEventListener("ping", function(e) {
var obj = JSON.parse(e.data);
var r_msg = obj.msg;
а код javascript второго пользователя будет следующим
var evtSource = new EventSource("sender.php");
evtSource.addEventListener("notify", function(e) {
var obj = JSON.parse(e.data);
var r_msg = obj.msg;
Объяснение кода
Вы можете назначить уникальное имя события каждому пользователю, а затем от отправителя вы просто отправляете данные на это имя события этого конкретного пользователя, в зависимости от того, что вы хотите. В приведенном выше коде пользователь получит сообщения, отправленные только для события ping, и то же самое со вторым пользователем, он получит сообщения, отправленные для уведомления о событии. В приведенном выше коде имя события и сообщения являются статическими, но вы можете сделать их динамическими в соответствии с вашими требованиями.
Надеюсь, это поможет вам.
person
Prashant Sushir
schedule
24.04.2013
А если несколько клиентов хотят получить одно и то же событие? И могут ли клиенты отказаться от подписки? (отличный ответ, хотя +1)
- person Mawg says reinstate Monica; 16.02.2017
События по-прежнему отправляются всем и только фильтруются на стороне клиента, поэтому все сообщения в основном общедоступны, и каждый несет расходы на получение всех событий. Предлагаемое решение будет работать, но небезопасно и не масштабируемо.
- person Mikkel; 20.07.2017