Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Websocket Apache 2.4.x代理Tomcat 7.x打开事件仅在浏览器端发生_Java_Apache_Tomcat_Websocket_Java Websocket - Fatal编程技术网

Java Websocket Apache 2.4.x代理Tomcat 7.x打开事件仅在浏览器端发生

Java Websocket Apache 2.4.x代理Tomcat 7.x打开事件仅在浏览器端发生,java,apache,tomcat,websocket,java-websocket,Java,Apache,Tomcat,Websocket,Java Websocket,我在浏览器端和服务器端使用javascript编写了一个聊天应用程序 使用javax.websocket api编程的端点。我首先测试了这个应用程序 通过在浏览器和tomcat以及所有东西之间建立连接 工作正常(操作系统是Windows7) 当我尝试使用apache 2.4.18服务器作为ssl上的反向代理时,似乎连接没有完全建立,我只在浏览器上得到一个onopen事件。 我的tomcat日志告诉我,服务器端点实例也已创建,但服务器端点实例上不会发生onopen事件。在我看来,服务器端点侦听错误

我在浏览器端和服务器端使用javascript编写了一个聊天应用程序 使用javax.websocket api编程的端点。我首先测试了这个应用程序 通过在浏览器和tomcat以及所有东西之间建立连接 工作正常(操作系统是Windows7)

当我尝试使用apache 2.4.18服务器作为ssl上的反向代理时,似乎连接没有完全建立,我只在浏览器上得到一个
onopen
事件。
我的tomcat日志告诉我,服务器端点实例也已创建,但服务器端点实例上不会发生
onopen
事件。在我看来,服务器端点侦听错误的端口或类似的端口

我在tomcat侧使用ajp接头。我试图解决这个问题,或者想出一个可能失败的办法,但没有成功

以下是我的代码片段:

Chrome网络日志:

Chrome Javascript控制台: 我的apache httpd配置:
LoadModule proxy\u modules/mod\u proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy\u wstunnel\u module modules/mod\u proxy\u wstunnel.so
LoadModule ssl\u module modules/mod\u 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/
nameVirtualHostMyHost
...
DocumentRoot“c:/Apache24/htdocs”
服务器名myhost
服务器管理员admin@example.com
斯伦金安
SSLProxyEngine打开
SSLCertificateFile“c:/OpenSSL-Win64/bin/chat.crt”
SSLCertificateKeyFile“c:/OpenSSL-Win64/bin/chat.key”
...
继续
MaxKeepAliveRequests 100
保持1000分钟
我的Tomcat日志:
09:39:50.756[ajp-bio-8009-exec-2]调试管理(3/1)ChatServer.checkOrigin,originHeaderValue:https://myhost
09:39:50.756[ajp-bio-8009-exec-2]调试管理(3/1)ChatServer.checkOrigin checkOrigin:true
09:39:50.756[ajp-bio-8009-exec-2]调试管理(3/1)ChatServer.getNegotiatedSubprotocol,getNegotiatedSubprotocol:
09:39:50.756[ajp-bio-8009-exec-2]调试管理(3/1)ChatServer.getNegotiatedSubprotocol,协商子目录:
09:39:50.756[ajp-bio-8009-exec-2]调试管理员(3/1)ChatServer.getNegotiatedExtensions,getNegotiatedExtensions:
09:39:50.756[ajp-bio-8009-exec-2]调试管理(3/1)ChatServer.getNegotiatedExtensions,negotiatedExtensions:permessage deflate
09:39:50.756[ajp-bio-8009-exec-2]调试管理员(3/1)ChatServer.getNegotiatedExtensions NegotiatedExtensions:[org.apache.tomcat.websocket。WsExtension@28130514]
09:39:50.756[ajp-bio-8009-exec-2]调试管理员(3/1)聊天服务器。修改握手,修改握手:
09:39:50.756[ajp-bio-8009-exec-2]调试管理员(3/1)ChatServer.modifyHandshake,HttpSession:org.apache.catalina.session。StandardSessionFacade@3fbf9eec
09:39:50.756[ajp-bio-8009-exec-2]调试管理(3/1)聊天服务器。修改握手,csrfsession:5e7f914546aef5bf389472c86b67234c1e68dc1e
09:39:50.756[ajp-bio-8009-exec-2]调试管理员(3/1)聊天服务器。修改握手,csrfrequest:
09:39:50.758[ajp-bio-8009-exec-2]调试管理(3/1)安全服务。读取用户:Benutzer 3 wird aus der Datenbank gelesen。。。
09:39:50.759[ajp-bio-8009-exec-2]调试管理(3/1)数据库服务。关闭连接:schliesse连接服务器:(1137989066)
09:39:50.759[ajp-bio-8009-exec-2]调试管理(3/1)ChatServer.modifyHandshake,ServerEndpointConfig集的用户属性…:{}
09:39:50.759[ajp-bio-8009-exec-2]调试管理(3/1)ChatServer.getEndpointInstance,getEndpointInstance:
09:39:50.759[ajp-bio-8009-exec-2]调试管理(3/1)聊天服务器Erstelle端点Instanz!
09:39:50.759[ajp-bio-8009-exec-2]调试管理员(3/1)ChatServer.getEndpointInstance端点实例:de.pmgnet.eprojectcare.websocket.chat.ChatServer。ChatServer@3f39a0a
通常在此之后,onopen事件会在我的server-endpoint.class中发生并被记录,但只有在我建立连接而不使用tomcat的代理时才会发生

这是我关于stackoverflow的第一个问题,如果我忘记订阅中的一些重要信息,请耐心等待。将
如果有人有什么建议,请客气一点。谢谢

在代理设置中将/添加到wss的末尾

ProxyPass /myapp/chat/ wss://x:443/myapp/chat/
ProxyPassReverse /myapp/chat/ wss://x:443/myapp/chat/

对于所有可能为同一主题而挣扎的人, 经过大量的网站访问和阅读,我找到了一个解决方案,并将为所有感兴趣的人做出结论

AJP连接器: AJP-tomcat 7的接头不工作!支持websocket,但也支持它 不提供任何日志或错误,另请参见: : x/%3C53FF3A3A。3040507@christopherschultz.net%3E

因此,对于websocket,我使用了https-connector,它已经随apache tomcat的server.xml一起提供:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https"      secure="true"
               keystoreFile="E:\ssl\mykeystore" keystorePass="315225"    keyPass="315225"
               clientAuth="false" sslProtocol="TLS" />
好吧,这是以代理错误结束的,由 tomcat的自签名证书。为了测试和开发您 可以通过在httpd.conf中添加几行来避免这种情况:


SSLR和OMSEED启动内置
SSLR和OMSEED连接内置
SSLProxyEngine打开
SSLProxyVerify无
SSLProxyCheckPeerCN关闭
SSLProxyCheckPeerName关闭
SSLProxycheckpeer关闭
我要解决的最后一件事是在我的pom.xml中为websocket选择正确的依赖项,这取决于tomcat版本,它可以在maven repository上找到:应该如下所示:

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-websocket</artifactId>
    <version>7.0.64</version>
</dependency>

org.apache.tomcat.embed
tomcat嵌入websocket
7.0.64
不要使用javax.websocket依赖项,即使使用
提供了
属性它对我不起作用(可能是我起作用了 出了什么事或忘记了什么事)

希望这能对你们有所帮助:-)

ProxyPass /myapp/chat/ wss://x:443/myapp/chat/
ProxyPassReverse /myapp/chat/ wss://x:443/myapp/chat/
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https"      secure="true"
               keystoreFile="E:\ssl\mykeystore" keystorePass="315225"    keyPass="315225"
               clientAuth="false" sslProtocol="TLS" />
ProxyPass /myapp/chat wss://myhost:8443/myapp/chat
ProxyPassReverse /myapp/chat wss://myhost:8443/myapp/chat

ProxyPass /myapp/ https://myhost:8443/myapp/
ProxyPassReverse /myapp/ https://myhost:8443/myapp/
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
</IfModule> 
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-websocket</artifactId>
    <version>7.0.64</version>
</dependency>