- 主题:请教个unix socket的问题
/proc/sys/net/unix/max_dgram_qlen
这个设置的是队列数量,也就是dgram模式下,单位世界内能够发送消息的个数?
并不是指单个消息的大小吧?
比如使用unix socket进行ipc,client每秒发送1000个消息,server每秒处理100个,nonblock模式
调整 /proc/sys/net/unix/max_dgram_qlen 可以拖延发送失败的到来是么?
补充下官网的解释
2. /proc/sys/net/unix - Parameters for Unix domain sockets?
There is only one file in this directory. unix_dgram_qlen limits the max number of datagrams queued in Unix domain socket’s buffer. It will not take effect unless PF_UNIX flag is specified.
有人调整过这个参数吗,比如改成65536?
linux挺多应用使用这个ipc的,比如syslog,dbus,
--
修改:b0207191 FROM 120.39.36.*
FROM 120.39.36.*
我的理解和你一致,是 package 的总数,不是大小。
不过,这个 unix socket 的效率好像不太行。
我很久以前用过,用于两个进程之间的 “生产-消费”模型。
后来因为效率不行,改为共享内存。
确实是很久以前哈,现在是不是有改善不好说。
【 在 b0207191 的大作中提到: 】
: /proc/sys/net/unix/max_dgram_qlen
: 这个设置的是队列数量,也就是dgram模式下,单位世界内能够发送消息的个数?
: 并不是指单个消息的大小吧?
: ...................
--
FROM 114.254.1.*
谢谢答复
我现在有这样一个情况,接收进程可能无法及时recv消息,导致缓冲区耗尽,发送进程send失败
unix socket本身没有提供流控机制,linux内核有没有方法可以调用查询出缓冲区剩余空间的接口
我调用下接口,可以自己预判,缓冲区不足,发送进程故意sleep,等着接收进程把堆积消息recv干净
【 在 ameng 的大作中提到: 】
我的理解和你一致,是 package 的总数,不是大小。
不过,这个 unix socket 的效率好像不太行。
我很久以前用过,用于两个进程之间的 “生产-消费”模型。
后来因为效率不行,改为共享内存。
确实是很久以前哈,现在是不是有改善不好说。
【 在 b0207191 的大作中提到: 】
: /proc/sys/net/unix/max_dgram_qlen
: 这个设置的是队列数量,也就是dgram模式下,单位世界内能够发送消息的个数?
: 并不是指单个消息的大小吧?
: ...................
--
FROM 120.36.16.*
我不知道内核是否有缓冲区是否满的机制。
但是可以模拟 TCP 慢启动的过程自己弄一个。
就是加一个反向的 unix socket.
数据里面加一个流水号。
接收端收到连续的包之后一直处理到 socket 空。
然后把最后一个连续流水号反向发给发送端(这个数据量小,不会溢出)。
发送端发送之前,先读这个反向过来的信息,进而判断是否有丢包或者内核里面是不是已经塞满了。
【 在 b0207191 的大作中提到: 】
: 谢谢答复
:
: 我现在有这样一个情况,接收进程可能无法及时recv消息,导致缓冲区耗尽,发送进程send失败
: ...................
--
FROM 223.72.88.*