[英]Why java.nio.SocketChannel not send data (Jdiameter)?
我创建了简单的直径客户端和服务器( 链接到源代码 )。 客户端必须发送10000条CCR消息,但是在Wireshark中,我只会发送大约300条CCR消息。 其他消息导致客户端超时。 我在装有Windows 7的不同计算机上运行服务器和客户端。我在JDiameter源代码行中找到了jdiameter发送了ccr(第280行),并且我认为万一套接字发送缓冲区已满,则不会发送ccr。 我在第280行之前添加此代码
while(bytes.hasRemaining())
客户端发送〜9900 ccr,但是非常慢。我在用c ++编写的其他直径服务器上测试了客户端,客户端(在不更改我的jdiameter上)发送了〜7000 ccr,但是此服务器托管在debian上。
我不知道解决此问题的方法,谢谢您的帮助。
如果发送方的发送返回零,则意味着发送方的套接字发送缓冲区已满,这又意味着接收方的套接字接收缓冲区已满,这又意味着接收方的读取速度慢于发送方的发送速度。
因此,加快接收速度。
注意:在非阻塞模式下,仅在write()
调用返回零时进行循环是不够的。 如果write()
返回零,则必须:
OP_READ
的通道并将其注册为OP_WRITE
OP_WRITE
触发时,再次执行写操作。 这次,如果它没有返回零,请注销OP_WRITE
,然后(可能根据您的要求)注册OP_READ
。 请注意,始终不为OP_WRITE
注册通道也是不正确的。 套接字通道几乎总是可写的,这意味着套接字发送缓冲区中几乎总是有空间。 什么你感兴趣的不是 -writable和可写的transistion。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.