-
пробую оседлать сокеты. Вроде в основном работает. Но есть одна проблемка, которая пока решается с помощью sleep(). А именно:
сервер не получает от клиента всю информацию. В осоьбенности когда серверу требуется долгое обращение к базе данныхю Например: кассируем товар <EAN>ett - вводим баркод, нажимаем Total и последния Total для продажи. Но, после введения баркода, сервер обращается к БД, и теряет концовку переданной ему строки. Как это победить?
ПыСы: причина вероятно лежит в том, что сервер раз в пять медленнее клиента (в смусле железо медленнее).
-
что значит "теряет"? Она вообще не доходит полностью?
-
я не могу точно сказать. Но эти буквы - это эмуляция нажатия кнопок на клавиатуре кассы. То что я вижу: ввод баркода осуществляется, потом нажимается ввод, дальше касса обращается к БД для поиска товара по коду, происходит кассирование товара, а тотал уже не доходит. Т.е. чек я закрыть не могу.
-
то же самое происходит и при регистрации кассира, например. Т.е. вводится номер кассира, номер денежного ящика (это то, куда купюры складываются) и ПИН: например, 2020е2020е2020ее. Дальше идет обращение к БД, для поиска данных кассира. После того как кассир определен появляется сообщение "Касса зарегистрирована - нажмите ВВОД" (для этого сообщения собственно и стоит выделенная жирным е). Но эта часть строки игнорируется.
Операции же, которые не требуют обращения к базе (например, шторнирование чека или позици) проходят на "ура".
-
ну а какие варианты? 1. "Усилить" железо на серваке 2. Оптимизировать доступ к БД 3. Организовать очередь, чтобы данные не терялись
-
clickmaker © (30.06.08 17:50) [4]мне наверное подходит только третий вариант. Потому что все остальное никак от меня не зависит. Только как это сделать? В коде на с++ это выглядело примерно так int CRSendKey(int iSocket, char *szKey)
}
return 0;
} но как выделенное дирным реализовать на яве, я никак не могу найти ((
-
нашла как реализовать wait. Просто серверу надо послать сообщение "wait". Но для меня проблема в том, что я могу посылать сообщения только побуквенно. Т.е. в процедуре: private void sendRequest(String _request) throws InterruptedException
}
catch (IOException er)
}
надо выполнить процедуру: private void sendWait() throws InterruptedException
}
catch (IOException er)
}
и вероятно буфер затирается.
-
кажется глупость написала (((
-
Глупость началась началась раньше, вот с этого:
> причина вероятно лежит в том, что сервер раз в пять медленнее > клиента (в смусле железо медленнее)
Грамотно реализованный транспортный алгоритм приемника не может терять ни байта передаваемых ей передатчиком по протоколу TCP данных.
Если это так, то проблема - в передатчике.
Поиски источника проблемы следует начинать с выяснения режима работы сокета-передатчика - блокирующий или неблокирующий.
-
> Галинка
Думаю, через форум научиться работать с сокетами с нуля сложновато будет.
-
> Думаю, через форум научиться работать с сокетами с нуля > сложновато будет.
Надеюсь, Галинка поняла, что это приглащение поговорить о сокетах в более тесном общении :)
|