1 / 安装最新版本的tomcat(8.0.28)并在java 8上运行它(我使用的是1.8.0_45 / 64-Bit版本)。 我在Windows 7 64位上运行Tomcat
2 /在Tomcat上启用SSL: 通过创建密钥库并取消注释server.xml文件中的https连接器来激活SSL,添加 keystoreFile =“”keystorePass =“” 到连接器。 仅供参考:这是我的连接器:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystorePass="password"
keystoreFile="/path/to/my/keystore" />
3 /安装Fiddler(www.telerik.com/fiddler)或任何其他工具来嗅探主机和服务器之间的流量,小提琴应该在您的主机上运行。我用Fiddler做了我的屏幕截图。
4 / 转到tools / options / https并选中“启用解密”。
5 / 使用Internet Explorer 11(chrome也可以,但是因为它压缩了websocket流量,因此很难达到8KB的数据),使用https远程访问tomcat并在https://server:8443/examples/websocket/echo.xhtml打开示例应用程序
选择“Programmatic API”,点击“Connect”,然后发送一条小测试消息
在fiddler上,双击websocket会话并查看websocket选项卡中的结果。
现在,尝试发送一个20KB的大文本,你会看到回复被分成8KB标记为“Continuation”的帧。应该有一个标有“最终”的框架,此时此处缺失。
发送另一条小消息,以便刷新丢失的帧。
如果我连接到在我的主机上本地运行的Tomcat,我不会重现此问题。 如果我不使用SSL,我不会重现此问题。
问题: - 为什么这样的行为,有没有人经历过同样的事情? - 如何正确解决此问题? - 我尝试启用Tomcat日志记录,但在日志记录中没什么好处的:org.apache.tomcat.websocket.level = FINE
问题显然与操作系统有关: 当Tomcat在Windows 7上时,它不起作用 当Tomcat在Windows 10上时,它可以工作 当Tomcat在Windows Server 2012 R2上时,它可以正常工作
简而言之,这个问题是OS(某些版本的Windows)/ SSL和WebSockets的组合。
答案 0 :(得分:0)
&#34;脏&#34;我现在发现的解决方法是发送最后一条消息来刷新缓冲区,因为我可以访问服务器端的代码。
如果您遇到这样的问题,请告诉我,因为这可能与某些特定Windows版本的SSL握手有关,而且我不知道如何解决问题。