我有一个运行在Tomcat7上的Java应用程序,它使用了Atmosphere Framework。大气是一个Websocket框架。我使用Atmosphere Sample Chat的示例应用程序。 我的问题是,我没有得到连接器以及运行我的Websocket Atmosphere应用程序的正确配置。如何配置Tomcat和HAProxy以使用WebSocket Framework大气?
的问题我已经是:
- 我希望如何配置我的HAProxy的?
- 如何配置我的Tomcat服务器?
- 如何为APR和NIO连接器配置Tomcat?
- 我是否必须在我的应用程序(即我的web.xml)中更改某些内容?
- 如何解决下面的错误?
这是我HAProxy的配置:
defaults
mode http
log global
option httplog
option http-server-close
option dontlognull
option redispatch
option contstats
retries 3
backlog 10000
timeout client 25s
timeout connect 5s
timeout server 25s
# timeout tunnel available in ALOHA 5.5 or HAProxy 1.5-dev10 and higher
# timeout tunnel 3600s
timeout http-keep-alive 1s
timeout http-request 15s
timeout queue 30s
timeout tarpit 60s
default-server inter 3s rise 2 fall 3
option forwardfor
frontend ft_web
bind *:80 name http
maxconn 60000
acl host_testhostdev hdr(host) -i www.testhost.com
use_backend apache-8080 if host_testhostdev
default_backend apache-8080
backend apache-8080
balance roundrobin
server websrv1 localhost:8080 maxconn 8000 weight 10 cookie websrv1 check
的的web.xml一部分,我的Servlet的气氛:
<async-supported>true</async-supported>
<init-param>
<param-name>org.atmosphere.useNative</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>org.atmosphere.cpr.AtmosphereInterceptor</param-name>
<param-value>org.atmosphere.interceptor.HeartbeatInterceptor,org.atmosphere.interceptor.AtmosphereResourceLifecycleInterceptor,org.atmosphere.client.TrackMessageSizeInterceptor</param-value>
</init-param>
<init-param>
<param-name>org.atmosphere.cpr.broadcaster.shareableThreadPool</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>org.atmosphere.cpr.sessionSupport</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>org.atmosphere.cpr.broadcasterCacheClass</param-name>
<param-value>org.atmosphere.cache.UUIDBroadcasterCache</param-value>
</init-param>
我在Tomcat的server.xml中改变什么
!--
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>
这些都是错误我得到:
和
2013-08-02 11:03:11,384 [http-nio-8080-exec-26] ERROR test.ReflectionService -
Service method exception in publishDataCreatedCount in service ClientNotificationUpdateService
java.lang.NullPointerException
at org.atmosphere.cpr.AtmosphereRequest.setAttribute(AtmosphereRequest.java:569)
at org.atmosphere.cpr.DefaultBroadcaster.executeAsyncWrite(DefaultBroadcaster.java:922)
at org.atmosphere.util.SimpleBroadcaster.queueWriteIO(SimpleBroadcaster.java:192)
at org.atmosphere.cpr.DefaultBroadcaster.deliverPush(DefaultBroadcaster.java:768)
at org.atmosphere.cpr.DefaultBroadcaster.push(DefaultBroadcaster.java:666)
at org.atmosphere.util.SimpleBroadcaster.broadcast(SimpleBroadcaster.java:133)
at test.ClientUpdateService.sendToBoard(ClientUpdateService.groovy:46)
at test.ClientNotificationUpdateService.publishDataCreatedCount(ClientNotificationUpdateService.groovy:179)
at test.ReflectionService.callByConvention(ReflectionService.groovy:59)
at test.ClientUpdateService.methodMissing(ClientUpdateService.groovy:65)
at test.NotificationService.create(NotificationService.groovy:206)
at test.HomeController.addAction(HomeController.groovy:402)
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
而这一次,如果我访问我的IE8和IE9应用:
2013-08-08 00:56:19,631 [http-nio-8080-exec-9] ERROR cpr.AtmosphereFramework - AtmosphereFramework exception
java.lang.IllegalStateException: Not supported.
at org.atmosphere.cpr.AtmosphereRequest.startAsync(AtmosphereRequest.java:594)
at org.atmosphere.container.Servlet30CometSupport.suspend(Servlet30CometSupport.java:130)
at org.atmosphere.container.Servlet30CometSupport.service(Servlet30CometSupport.java:105)
at org.atmosphere.container.Tomcat7Servlet30SupportWithWebSocket.doService(Tomcat7Servlet30SupportWithWebSocket.java:65)
at org.atmosphere.container.TomcatWebSocketUtil.doService(TomcatWebSocketUtil.java:87)
at org.atmosphere.container.Tomcat7Servlet30SupportWithWebSocket.service(Tomcat7Servlet30SupportWithWebSocket.java:61)
at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:1594)
at org.atmosphere.cpr.AtmosphereServlet.doPost(AtmosphereServlet.java:176)
at org.atmosphere.cpr.AtmosphereServlet.doGet(AtmosphereServlet.java:162)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
2013-08-08 00:56:19,670 [http-nio-8080-exec-2] ERROR cpr.AtmosphereFramework - AtmosphereFramework exception
java.lang.IllegalStateException: Not supported.
at org.atmosphere.cpr.AtmosphereRequest.startAsync(AtmosphereRequest.java:594)
at org.atmosphere.container.Servlet30CometSupport.suspend(Servlet30CometSupport.java:130)
at org.atmosphere.container.Servlet30CometSupport.service(Servlet30CometSupport.java:105)
at org.atmosphere.container.Tomcat7Servlet30SupportWithWebSocket.doService(Tomcat7Servlet30SupportWithWebSocket.java:65)
at org.atmosphere.container.TomcatWebSocketUtil.doService(TomcatWebSocketUtil.java:87)
at org.atmosphere.container.Tomcat7Servlet30SupportWithWebSocket.service(Tomcat7Servlet30SupportWithWebSocket.java:61)
at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:1594)
at org.atmosphere.cpr.AtmosphereServlet.doPost(AtmosphereServlet.java:176)
at org.atmosphere.cpr.AtmosphereServlet.doGet(AtmosphereServlet.java:162)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)