Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.03.21;
Скачать: CL | DM;

Вниз

Sckets: почему так получается   Найти похожие ветки 

 
Галинка   (2008-06-30 17:35) [0]

пробую оседлать сокеты. Вроде в основном работает. Но есть одна проблемка, которая пока решается с помощью sleep(). А именно:

сервер не получает от клиента всю информацию. В осоьбенности когда серверу требуется долгое обращение к базе данныхю Например: кассируем товар <EAN>ett - вводим баркод, нажимаем Total и последния Total для продажи. Но, после введения баркода, сервер обращается к БД, и теряет концовку переданной ему строки. Как это победить?

ПыСы: причина вероятно лежит в том, что сервер раз в пять медленнее клиента (в смусле железо медленнее).


 
clickmaker ©   (2008-06-30 17:40) [1]

что значит "теряет"? Она вообще не доходит полностью?


 
Галинка   (2008-06-30 17:43) [2]

я не могу точно сказать. Но эти буквы - это эмуляция нажатия кнопок на клавиатуре кассы. То что я вижу: ввод баркода осуществляется, потом нажимается ввод, дальше касса обращается к БД для поиска товара по коду, происходит кассирование товара, а тотал уже не доходит. Т.е. чек я закрыть не могу.


 
Галинка   (2008-06-30 17:48) [3]

то же самое происходит и при регистрации кассира, например. Т.е. вводится номер кассира, номер денежного ящика (это то, куда купюры складываются) и ПИН: например, 2020е2020е2020ее. Дальше идет обращение к БД, для поиска данных кассира. После того как кассир определен появляется сообщение "Касса зарегистрирована - нажмите ВВОД" (для этого сообщения собственно и стоит выделенная жирным е). Но эта часть строки игнорируется.

Операции же, которые не требуют обращения к базе (например, шторнирование чека или позици) проходят на "ура".


 
clickmaker ©   (2008-06-30 17:50) [4]

ну а какие варианты?
1. "Усилить" железо на серваке
2. Оптимизировать доступ к БД
3. Организовать очередь, чтобы данные не терялись


 
Галинка   (2008-06-30 17:58) [5]

clickmaker ©   (30.06.08 17:50) [4]

мне наверное подходит только третий вариант. Потому что все остальное никак от меня не зависит. Только как это сделать?

В коде на с++ это выглядело примерно  так

int CRSendKey(int iSocket, char *szKey)
{
int i=0;
 for (i=0;i<strlen(szKey);i++)
 {
  if (*(szKey+i) != """) {
   send(iSocket,szKey+i,1,0);
   wait(iSocket);
  }
 }

return 0;
}


но как выделенное дирным реализовать на яве, я никак не могу найти ((


 
Галинка   (2008-06-30 19:39) [6]

нашла как реализовать wait. Просто серверу надо послать сообщение "wait". Но для меня проблема в том, что я могу посылать сообщения только побуквенно. Т.е. в процедуре:
private void sendRequest(String _request) throws InterruptedException
{
 try{
  output.flush();
  for (int i=0; i<_request.length(); i++)
  {
   output.write(_request.charAt(i));
   sendWait();
  }
 }
 catch (IOException er)
 {
  System.err.println(er.toString());
  System.exit(-1);
 }
}


надо выполнить процедуру:
private void sendWait() throws InterruptedException
{
 String waitReq = "*wait\n";
 try{
  for (int i=0; i<waitReq.length(); i++)
  {
   output.write(waitReq.charAt(i));
  }
 }
 catch (IOException er)
 {
  System.err.println(er.toString());
  System.exit(-1);
 }
}


и вероятно буфер затирается.


 
Галинка   (2008-06-30 19:48) [7]

кажется глупость написала (((


 
Сергей М. ©   (2008-06-30 20:22) [8]

Глупость началась началась раньше, вот с этого:

> причина вероятно лежит в том, что сервер раз в пять медленнее
> клиента (в смусле железо медленнее)


Грамотно реализованный транспортный алгоритм приемника не может терять ни байта передаваемых ей передатчиком по протоколу TCP данных.

Если это так, то проблема - в передатчике.

Поиски источника проблемы следует начинать с выяснения режима работы сокета-передатчика - блокирующий или неблокирующий.


 
Sha ©   (2008-07-01 09:37) [9]

> Галинка

Думаю, через форум научиться работать с сокетами с нуля сложновато будет.


 
ЮЮ ©   (2008-07-01 11:43) [10]

> Думаю, через форум научиться работать с сокетами с нуля
> сложновато будет.


Надеюсь, Галинка поняла, что это приглащение поговорить о сокетах в более тесном общении :)



Страницы: 1 вся ветка

Текущий архив: 2010.03.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
2-1263762231
@!!ex
2010-01-18 00:03
2010.03.21
Как сделать форму не замерзающую при вызове диалогов.


4-1231029490
olevacho_
2009-01-04 03:38
2010.03.21
Просмотр напечатанных страниц


1-1242738691
Franzy
2009-05-19 17:11
2010.03.21
Некорректное отображение программ Дельфи на некоторых компах


6-1215009957
FireMan_Alexey
2008-07-02 18:45
2010.03.21
Proxy-Server вопрос по RFC2068


15-1262122222
Юрий
2009-12-30 00:30
2010.03.21
С днем рождения ! 30 декабря 2009 среда