通过踩踏与阿尔忒弥斯的连接在尝试使用 SSL 读取大消息时中断



我的代码相当简单。我正在使用 https://github.com/stomp-php/stomp-php 库,并尝试从Artemis队列中读取消息。这只是一个简单的$stomp->read();.

预期行为:

  • 我从队列中收到一条消息,或者被告知队列中没有消息

发生了什么事情:

  • read 方法引发异常(见下文)
  • 当我们不使用SSL,使用基本的TCP连接,没有证书时,一切都很好。仅当我们使用SSL方案,SSL端口与证书连接时,才会发生这种情况。

例外是:Was not possible to read data from stream.,扔在 [stomp-php 目录]/src/Network/Connection.php第 473 行。

以下是流连接的上下文:

ssl:
peer_name: '[censored]'
cafile: '[censored certificate path].cer'

证书文件存在并正确读取(因为当我更改路径时,甚至在尝试发送消息之前就会抛出异常)。对等名称也是正确的,因为另一个会触发另一个错误,告诉我对等名称不正确。

我的测试很简单:我有一个发送消息的文件和一个读取消息的文件。当我不订阅队列时,发送总是有效的。读起来有点乱。

新信息:当我从发送中删除 5 条特定消息时,读数似乎有效。这意味着如果我发送这 5 个中的一个,读数会引发异常。如果只有其他消息,而这 5 条消息中没有一条,则阅读效果很好。我会假设消息是原因,但同样,当我不使用 SSL 连接时,一切正常。

再次新信息:为了不出错,我必须不发送的每条消息都有大量的行。我尝试再次发送其中一个并从其内容 (XML) 中删除除一个节点之外的每个节点:它工作正常。所以我尝试了~900个节点:错误。~200 个节点:错误。~130 个节点:有时会出错。~80 个节点:工作。

SSL 在处理大型邮件时遇到问题?

再次获得新信息:我尝试var_dumping图书馆中 fread 调用的结果。发生错误时,结果为空字符串 ('')。从我在文档中读到的内容来看,fread 在失败时返回 false,在超时时返回空字符串。对于"再次新信息"集团是有意义的,我们发现大消息导致了问题。

我在 60 秒内尝试了 stream_set_timeout(),我尝试手动发送心跳,我尝试使用 lib 设置它,我尝试使用 lib 更改超时,并尝试增加 maxReadBytes。到目前为止没有任何效果。还是一样的行为。

通过将 stomp-php 库恢复到版本 4.3.1 :( 来修复

相关内容

  • 没有找到相关文章

最新更新