【发布时间】:2016-05-21 22:44:19
【问题描述】:
我在浏览器端和服务器上使用 javascript 编写了一个聊天应用程序 使用 javax.websocket api 编程的端点。我首先测试了应用程序 通过在浏览器和tomcat之间建立连接以及一切 运行良好(操作系统为 Windows 7)。
当我尝试使用 apache 2.4.18 服务器作为 ssl 反向代理时,似乎连接没有完全建立,我只在浏览器上收到 onopen 事件。
我的 tomcat 日志告诉我,服务器端点实例也已创建,但服务器端点实例上没有发生 onopen 事件。在我看来,服务器端点侦听了错误的端口或类似的东西。
我在 tomcat 端使用 ajp 连接器。我试图解决问题或了解可能失败的地方,但没有成功。
这是我的代码 sn-ps:
Chrome 网络日志:
Chrome-Javascript-控制台:
controller_chat.js:1952 chatBuildWSLink
controller_chat.js:1960 wsLink: wss://x:443/myapp/chat
controller_chat.js:343 chatCheckConnection
controller_chat.js:345 connect
controller_chat.js:313 Connecting to wss://x:443/myapp/chat
controller_chat.js:353 wsServerOnOpen
controller_chat.js:363 wsServerOnMessage
controller_chat.js:411 wsServerOnError
controller_chat.js:422 wsServerOnClose
controller_chat.js:228 chatCreateMenuBar
controller_chat.js:5 chatCreateTable
controller_chat.js:5 chatCreateTable
controller_chat.js:5 chatCreateTable
controller_chat.js:5 chatCreateTable
controller_chat.js:355 onopen Event: {"isTrusted":true}
controller_chat.js:356 onopen Event-Code: undefined
controller_chat.js:357 onopen Event-Reason: undefined
controller_chat.js:358 onopen Event-WasClean: undefined
我的 apache httpd-conf:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule ssl_module modules/mod_ssl.so
ProxyPass /myapp/chat/ wss://x:443/myapp/chat
ProxyPassReverse /myapp/chat/ wss://x:443/myapp/chat
ProxyPass /myapp/ ajp://x:8009/myapp/
ProxyPassReverse /eProjectCare/ ajp://x:8009/myapp/
NameVirtualHost myhost
<VirtualHost myhost:443>
...
DocumentRoot "c:/Apache24/htdocs"
ServerName myhost
ServerAdmin admin@example.com
SSLEngine on
SSLProxyEngine on
SSLCertificateFile "c:/OpenSSL-Win64/bin/chat.crt"
SSLCertificateKeyFile "c:/OpenSSL-Win64/bin/chat.key"
...
</VirtualHost>
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 1000
我的 Tomcat 日志:
09:39:50.756 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer.checkOrigin , originHeaderValue: https://myhost
09:39:50.756 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer.checkOrigin checkOrigin: true
09:39:50.756 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer.getNegotiatedSubprotocol , getNegotiatedSubprotocol:
09:39:50.756 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer.getNegotiatedSubprotocol, negotiated Subprotocoll:
09:39:50.756 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer.getNegotiatedExtensions , getNegotiatedExtensions:
09:39:50.756 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer.getNegotiatedExtensions, negotiatedExtensions: permessage-deflate
09:39:50.756 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer.getNegotiatedExtensions NegotiatedExtensions: [org.apache.tomcat.websocket.WsExtension@28130514]
09:39:50.756 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer.modifyHandshake , modifyHandshake:
09:39:50.756 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer.modifyHandshake , HttpSession: org.apache.catalina.session.StandardSessionFacade@3fbf9eec
09:39:50.756 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer.modifyHandshake , csrfsession: 5e7f914546aef5bf389472c86b67234c1e68dc1e
09:39:50.756 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer.modifyHandshake , csrfrequest:
09:39:50.758 [ajp-bio-8009-exec-2] DEBUG admin (3/1) SecurityService.readUser: Benutzer 3 wird aus der Datenbank gelesen ...
09:39:50.759 [ajp-bio-8009-exec-2] DEBUG admin (3/1) DatabaseService.closeConnection: schliesse Connection fuer: <.getLiveUser:> (1137989066)
09:39:50.759 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer.modifyHandshake , userProperties for ServerEndpointConfig set...: {}
09:39:50.759 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer.getEndpointInstance , getEndpointInstance:
09:39:50.759 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer Erstelle Endpoint-Instanz!
09:39:50.759 [ajp-bio-8009-exec-2] DEBUG admin (3/1) ChatServer.getEndpointInstance Endpoint-Instance: de.pmgnet.eprojectcare.websocket.chat.chatserver.ChatServer@3f39a0a
通常在那之后,onopen 事件发生在我的 server-endpoint.class 中并被记录下来,但这只发生在我建立没有代理到 tomcat 的连接时...
这是我关于 stackoverflow 的第一个问题,如果我在订阅中忘记了一些重要信息,请耐心等待。将 如果有人有建议,那就太好了。谢谢!
【问题讨论】:
标签: java apache tomcat websocket java-websocket