LINUX.ORG.RU
ФорумAdmin

Удобная схема временного чата на PHP (шпаргалка)

 , , , ,


1

2

Памятка. Найдено на php.net по ключевым словам: sockets, php.

Интересно, что схема позволяет быстро создать чат, например, для общения двух администраторов, настраивающих одну станцию. Предваряя вопросы и ответы на тему - «а зачем оно надо» и «такие чаты уже есть» - скажу, что это лишь возможность, а пользоваться или нет - ваше дело.

Допустим, есть модель ситуации:

  1. Сервер с VNC и ssh.
  2. На него заходят два человека из разных точек, и им требуется messaging.

Решение:

  1. На сервере запускается скрипт php, слушающий сокет через tcp (через ssh udp работать не будет. Поправьте, если ошибаюсь.).

Допустим, выбран порт 1117. Запуск из консоли сервера: php php_server_php

$server = stream_socket_server('tcp://127.0.0.1:1117');
while (1){
$socket = stream_socket_accept($server);
$ptk=stream_socket_recvfrom($socket, 15);
	if ( $ptk > 0) { 
	echo $ptk;
	}
}
fclose($socket);
fclose($server);
  1. Если нужно отправлять со своего компьютера сообщения, то через ssh осуществляется проброс порта.

Примерно так: ssh -L 1117:127.0.0.1:1117 -N -l user remote_server_ip

  1. Отправка сообщений из консоли:

echo 'Test' > /dev/tcp/127.0.0.1/1117

P.S. Без ssh можно использовать сервер udp.

$socket = stream_socket_server("udp://127.0.0.1:1117", $errno, $errstr, STREAM_SERVER_BIND);
if (!$socket) {
    die("$errstr ($errno)");
}

do {
    $pkt = stream_socket_recvfrom($socket, 1, 0, $peer);
    echo "$peer\n";
	echo $pkt;
    stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0, $peer);
} while ($pkt !== false);

Отправка сообщений по протоколу udp из консоли: echo 'Test' > /dev/udp/127.0.0.1/1117

P.P.S Примеры взяты с php.net. Чуть-чуть модифицированы.

Ниже картинка, подтверждающая, что выглядит это довольно сносно: https://ibb.co/Ltnmn4R



Последнее исправление: AnonymUser (всего исправлений: 1)
Ответ на: комментарий от AnonymUser

Правда, вот у меня в эмуляторах терминала wall не работает. У другого пользователя права просит.

Т.е. не сказать, что прямо вот так из коробки заработает.

AnonymUser
() автор топика
Ответ на: комментарий от sanwashere

А ещё можно завернуть nc в rlwrap и получить возможность перемещать курсор для редактирования сообщений (и ещё множество всяких разных удобных плюшек)

annulen ★★★★★
()