php socket



Автор Александр Косарев задал вопрос в разделе Другие языки и технологии

PHP и UDP-сервер: Проблема с приёмом информации и получил лучший ответ

Ответ от D P[гуру]
Выше совершенно верно написали, что UDP - протокол без гарантии доставки. Если вам нужна гарантированная доставка по UDP - то это можно реализовать только внеся изменения и в сервер, и в клиент (и это, фактически, будет надстройка над UDP)
Далее:
1. Использование недоязыка PHP для создания демонов, работающих под нагрузкой - это очень плохая идея. Это же относится в большей или меньшей степени и к другим интерпретируемым языкам. Демоны для обработки данных с высокой нагрузкой надо писать на С/С++. Также неплохо бы встроить в них какую-либо обработку ошибок и нештатных ситуаций.
2. Идея построчной записи в лог в ответ на каждый пук сервера, реализованная в строчке file_put_contents("logs/cstrike.log","$buf
",FILE_APPEND); мало подходит для применения под нагрузкой. Надо стараться минимизировать количество операций ввода-вывода
3. Идея вешать на UDP сокет, принимающий юникаст с одного заранее известного адреса SO_BROADCAST и SO_KEEPALIVE лично мне представляется очень странной 😀 Если уж так хочется поиграться с опциями - посмотрите в сторону SO_RCVBUF

Ответ от Sm[гуру]
Никаким.
UDP - протокол БЕЗ гарантии доставки дейтаграмм.

Ответ от Extrn[гуру]
главная ошибка, в том, что вы используете препроцессор гипертекста в таком неподходящем для него деле.
оставьте скрипт на перле в покое, пусть себе работает.
но если неймется - увеличьте размер буфера чтения. 100 байт видимо маловато
$address="192.168.1.2";
$port=27500;
$socket=socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1);
socket_set_option($socket, SOL_SOCKET, SO_KEEPALIVE, 1);
socket_bind($socket,$address,$port);
while(true) {
$len = socket_recvfrom($socket, $buf, 10000, 0, $peeraddr, $peerport);
print "DEBUG: recieved $len bytes from $peeraddr:$peerport
";
file_put_contents("cstrike.log","$buf
",FILE_APPEND);
}

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: PHP и UDP-сервер: Проблема с приёмом информации
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*