2012-04-27 2 views
2

Я попытался создать веб-проект о сокетной связи, но tomcat застрял в run.i, чтобы класс сервера был запущен в классе слушателя, когда инициируется проект , Но я встречаю проблему, которая, по-видимому, не запускает Spring config xml.
Я предполагаю, что класс сервера продолжает слушать все время, блокируя работу tomcat.
Как я могу решить эту проблему?
основной код web.xmlсервер сокетов, сконфигурированный в классе слушателя, блокирует работу tomcat

<listener> 
    <listener-class>socket.ServerListener</listener-class> 
</listener> 
<servlet> 
    <servlet-name>context</servlet-name> 
    <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>/WEB-INF/applicationContext.xml</param-value> 
</context-param> 
+0

Что вы подразумеваете под «запасом»/«запасом»? Не могли бы вы более подробно объяснить, что происходит (или не происходит)? – Mat

+0

Я имею в виду, что tomcat застрял, извините за неправильное письмо – Dumlys

+0

Вы можете отредактировать свое сообщение, чтобы исправить его, есть ссылка «редактировать» прямо под тегами. Но, пожалуйста, добавьте более подробную информацию. «застрял» на самом деле ничего не описывает – Mat

ответ

1

Если вы звоните принять() в том же потоке, что называется ваш слушатель, конечно Tomcat блокируется. Tomcat не может продолжаться до тех пор, пока ваш метод прослушивания не вернется.

Мораль: не делайте этого. Используйте отдельный поток.

+0

Кажется, это правильный путь. Не могли бы вы рассказать мне больше о том, как это сделать. Если я остановлюсь на потоке сервера на мгновение? – Dumlys

+0

@Dumlys Вы не должны останавливать поток сервера * вообще, это то, что я вам говорю. Начните отдельный поток, чтобы выполнить 'accept()' -ing, и еще один на принятый сокет. – EJP

+0

Спасибо! Я попробую. – Dumlys