Значит:
имеется 3 скрипта на сервере,
1й. API- который сохраняет в базу значения и передает в семафор события.
2й. Обычный сайт с графиками. Графики грузятся при обновлении страницы.
-После загрузки страницы сайта, JS запрашивает на сервере SSE поток.
3й. Скрипт который передает через SSE поток на страницу клиента сообщения полученные из симаффора.
PS что SSE, что семафор я начал использовать первый раз. Вот в песочнице грязный код, чтобы хоть чтото заработало.
КОД:
1й:
$id =6; // - это id графика
$stream_id = msg_get_queue($id);
$result['remove'] = msg_remove_queue($stream_id);
$stream_id = msg_get_queue($id);
$message = "{\"DevID\":$id,\"DevEUI\":\"$DevEUI\",\"payload_hex\":\"$payload_hex\"}"; // какой то JSON
$result['send'] = msg_send($stream_id, $id, $message, false, true, $err);
$result['stat'] = msg_stat_queue($stream_id);
3й:
date_default_timezone_set('Europe/Moscow'); // "America/New_York" 'Europe/Moscow'
header('Cache-Control: no-cache');
header("Content-Type: text/event-stream");
header("Connection: keep-alive");
$queue_id = msg_get_queue($id);// Такой же ID как из 1го скрипта, тот же ID для того же графика.
while (1) {
if (msg_receive ($queue_id, 1, $id, 16384, $message, false, 0, $msg_error)) {
if (in_array(strtolower($message), 'quit','exit'))
break;
echo "id: $id\n";
echo "data: $message\n";
echo "\n";
} else {
echo "data: $msg_error\n";
echo "\n";
break;
}
ob_end_flush();
flush();
if(connection_aborted())
break;
}
msg_remove_queue ($queue_id);
В общем при вызове 1го скрипта
в клиенте в консоли JS сыпится сразу 3лога.
OPEN, Message, Error.
Причем Message скрипт получает 43. т.е. это сообщение ошибки при неудачном выполнении msg_send.
В 1ом скрипте есть ошибка как Вы заметили, я там 2 раза указал оператор msg_get_queue(). а между ними указал оператор msg_remove_queue();
.
Так вот если я не буду указывать msg_get_queue() и msg_remove_queue() дополнительно.
То клиент вообще не получает сообщений.
А если укажу эти 2 функции то клиент получает сообщение 43 , ошибку и открытие каждый раз при вызове msg_send семафора ,
1. Не понятно что за ошибка семафора 43.
2.Не понятно каким образом msg_remove_queue() очистка семафора влияет на новое открытие потока.
3.Не понятно какой инструмент использовать в браузере чтобы видеть состояние подключения к 3тему скрипту клиентом.
Спасибо большое за помощь. Это то что нужно.
Но есть проблемка. Семафор возвращает ошибку, а коды ошибок ни где нету.
Вы прежде имели дело с ошибками семафоров?
Ocelot, а можно один диод подключить параллельно стабилитрону а другой последовательно? С резисторами поиграться на землю и на питание чтобы при открытом стабилитроне ток тек через один диод , а при закрытом через другой.
Ocelot, спасибо, проглядел комментарий.
, но может ли один светодиод загораться когда полевик открыт, а другой загораться когда полевик закрыт. А питание стабилитроном мерять.
Что-то из этого придумать можно?.
Например первый светодиод последовательно полевику а другой параллельно.
А вот схема имеет 1 светодиод, в не 2.
Тем более индикатор сигнализации он моргает. Получается на индикатор с микросхемой будет то подаваться питание то нет
Аналогично думаю что криво сохранять в Базу а потом. Искать в базе данные. И если они будут хранится в базе то причём тут SSE. Это получается JS на клиенте будут инициализировать новый GET запрос по которому скрипт PHP будет вынимать данные из базы. В Вашем предложении нет SSE вообще. А автор спрашивает об SSE. Я к нему присоединяюсь и хочу узнать как из одной сессии вызвать скрипт другой сессии подключенный к другому клиенту который сразу же будет рассылать по SSE
FanatPHP, я не забыл. несколько лет назад стало популярным использовать анаонимные и стрелочные функции.
для чистоты кода и для синтаксической краткости это удобно. по этим же причинам могло бы быть значения по умолчанию для не определенных свойств.
и если все равно, автоматом, туда положить 0, то этот 0 будет просто мусором.
В половине случаев это будет мусором. А в другой половине, это сэкономит на проверках, и сэкономит на определениях значения по умолчанию.
Моя идея служит для чистоты кода.
Vitsliputsli, ( galliard )
C# и Java языки для корпоротивного сегмента. Почему же это так?
Потому что программист программируя сконцентрирован на бизнес логике, а не на низкоуровневых проверках. Проблема не в том чтобы проверить 2 поля.
А проблема в том что получив класс с 200 полями, сбиндить это таблицей базы данных, а потом это сбиндить с таблицей пользовательского интерфейса, деревом каталогов, и таймлайном.
.
В Майкрософте, хорошие программисты пишут ядро ОСек и компиляторы. А плохие программисты в Майкрософт пишут программы типа Word, Excel. Эти плохие программисты плохие не потому что они ленивые, просто опыта еще мало. Хороших программистов в мире на всех не хватит.
По Вашей логике чтобы все было подконтрольно, то надо чтобы каждый пользователь сам делал очистку мусора в памяти и после объявления объекта в обязательном порядке должен его удалить. А приложение обязательно должно падать при условии что объект не удален. Чтобы показать программисту что он его забыл удалить.
У большинства программистов проекты СтартАповые, нету времени на высокопроизводительную оптимизацию.
Я создаю сайты. У всех моих клиентов оплачена абонентская плата, но их сайты стоят без посещений.
Если бы я им предложил бы на выбор точно такой же но высокопроизводительный сайт по цене в 2 раза выше. Они бы меня послали бы нафиг.
имеется 3 скрипта на сервере,
1й. API- который сохраняет в базу значения и передает в семафор события.
2й. Обычный сайт с графиками. Графики грузятся при обновлении страницы.
-После загрузки страницы сайта, JS запрашивает на сервере SSE поток.
3й. Скрипт который передает через SSE поток на страницу клиента сообщения полученные из симаффора.
PS что SSE, что семафор я начал использовать первый раз. Вот в песочнице грязный код, чтобы хоть чтото заработало.
КОД:
1й:
3й:
2й JavaScript:
В общем при вызове 1го скрипта
в клиенте в консоли JS сыпится сразу 3лога.
OPEN, Message, Error.
Причем Message скрипт получает 43. т.е. это сообщение ошибки при неудачном выполнении msg_send.
В 1ом скрипте есть ошибка как Вы заметили, я там 2 раза указал оператор msg_get_queue(). а между ними указал оператор msg_remove_queue();
.
Так вот если я не буду указывать msg_get_queue() и msg_remove_queue() дополнительно.
То клиент вообще не получает сообщений.
А если укажу эти 2 функции то клиент получает сообщение 43 , ошибку и открытие каждый раз при вызове msg_send семафора ,
1. Не понятно что за ошибка семафора 43.
2.Не понятно каким образом msg_remove_queue() очистка семафора влияет на новое открытие потока.
3.Не понятно какой инструмент использовать в браузере чтобы видеть состояние подключения к 3тему скрипту клиентом.