我试着搜索我面临的这个奇怪的问题,但在网上找不到任何东西。以下是我正在努力做的事情。
将文件从用户浏览器上传到运行在不同环境上的Play服务器
以下是我面临的问题。
区块在到达播放服务器之前被截断
观察结果:
-
Chunk是在客户端根据java脚本正确创建的,
websocket.send()
正在将正确的Chunk传递给Play。 -
在Play服务器上,区块是作为
String
事件对象来的,它被截断了。 - 这个问题非常奇怪的一点是,这只发生在一些机器/网络上,而对于所有其他机器/网络来说,它运行良好
- 当尝试使用不同的块大小时,已经观察到对于较小的块,许多初始块被正确接收,后来一个失败
- 我们已经尝试在一些网络上绕过防火墙和代理,以检查如果没有这样的限制会发生什么,但它仍然失败
请提供您的输入,可以帮助我调试和修复此问题。你想要的任何其他东西我都可以提供,不粘贴代码,因为它在大多数机器和网络上都能工作,但在少数机器和网络中失败了,所以它似乎不是一个代码问题
PS。这个问题可以根据人们的观点得到很多答案,对于所有SO用户,我只需要帮助了解可能出错的地方,所以请不要将其标记为不合适的
我已经弄清楚了,问题是谷歌chrome的最新更新。我从这里下载了chrome(版本37),它开始运行良好。
一段时间后,我才知道这个问题是因为chrome V38中对单个消息的多个帧的实现更改,最初它是在单个帧中传输的,所以最终也需要更改服务器端的实现才能处理相同的消息。
我使用的是旧版本的Play框架,它没有这种多帧处理的实现,所以它正在崩溃。
在将Play更新到2.2.3后,它开始正常工作,因为他们在该版本中实现了多帧处理。下面的一些有用链接
最新Chrome 问题
播放更改日志
Play 2.2.3 中WebSockets的Continuation帧处理的更改