| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Работа с сетью > Неразбериха в серверных потоках |
| Автор: sith 4.4.2007, 22:57 | ||
| есть такая тема... ... сервер для каждого нового клиента создает отдельный потоk (ClientThread) который получает обьект Socket s для работы с клиентом... дальше в этом потоке создаються еще два потока которым передаеться все тот же обьект Socket один поток для чтения (InputThread) другой для отправки обьектов (OutputThread)... ... в потоке InputThread осуществляеться чтение обьекта... код следующий
...но этот фрагмент работает... если его размещать в теле метода run потока ClientThread(то есть создателя потоков ввода вывода Input/OutputThread) в потоке InputThread он не работает... при работе дебагером строчка response = (Message) inObj.readObject(); - просто пропускаеться... переменная не инициализируеться... и цикл продолжает выполняться... причем непонятно получаеться что метод readObject() неполучив обьекта продолжил свою работу... не понимаю... исключений никаких не вылазит... ... ЧТО НЕ ТАК? |
| Автор: sith 4.4.2007, 23:50 | ||||
| Странно все оказалось намного проще... ...
... правда есть еще один ньюанс мне не понятный... но о нем завтра... |
| Автор: cherep 6.4.2007, 15:28 |
| не очень понятно, для чего порождать 2 потока на чтение и запись в клинтский сокет. Не проще ли работать в рамках одного потока ClientThread?? Особенно если общение между клиентом и сервером предполагается синхронное (прочитал - записал - прочитал - ...). Иначе придется парится с синхронизацией этих 2 тредов.. Но это общие сооброжение. В специфику задачи не вникал.. |
| Автор: sith 6.4.2007, 21:12 |
| идея моя такова... клиент и сервер всегда слушают канал... поэтому InputThread на сервере и клиенте реализуються в отдельных потоках... при возникновении события слушатель потока узнает об этом(пришло сообщение от клиента или сервера) обрабатывает его, выполняет свою логику и если надо создает поток для отправки ответного сообщения... ... клиент и сервер не работают синхронно... я бы даже сказал что модель их работы событийная... событие произошло... выполнились нужные действия и опять слушать... |