- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
来自 linux 套接字 manpage :
SO_PRIORITY
Set the protocol-defined priority for all packets to be sent on this socket. Linux uses this value to order the networking queues: packets with a higher priority may be processed first depending on the selected device queueing discipline.
这是设置使用:
int optval=7 // valid values are in the range [1,7]
// 1- low priority, 7 - high priority
setsockopt(socket, SOL_SOCKET, SO_PRIORITY, &optval, optlen)
然后说,这个过程有:
一个。来自 socket_1
- socket_10
的 10 个低优先级套接字(优先级 = 4),
b. 1 个高优先级套接字 (priority=7) - socket_11
以下场景会发生什么:
send()
:进程在 socket_1
-socket_10
和 socket_11
上发送多个消息, socket_11
上的 IMO 消息优先于通过 socket_1
-socket_10
发送的消息。
recv()
:如果在上述所有套接字上都收到了多个消息,socket_11
是否在读取消息时获得更高的优先级 socket_1
-socket_10
?
有没有一种方法可以使用 lsof
、netstat
等工具从命令行测量套接字优先级?
最佳答案
每个 Linux 网络接口(interface)都有一个所谓的qdisc(排队规则)。您的问题的答案取决于所使用的 qdisc。一些排队规则,如 pfifo and bfifo ,没有优先级的概念。因此,如果使用它们,答案很简单——不会有优先级排序
但是,使用优先级 qdisc,例如 pfifo_fast (通常是 Linux 上的默认 qdisc),套接字优先级会产生影响。
这张图片描述了 pfifo_fast qdisc 中发生的事情:
我们看到数据包根据其优先级放置在队列中。当接口(interface)发送下一个数据包(实际上是 frame,但我们先不谈这个)时,它将始终选择发送具有最高优先级的数据包。这意味着如果有多个数据包在等待,优先级最高的将首先发送。请注意,这需要接口(interface)拥塞 - 如果接口(interface)不拥塞并且数据包一从操作系统到达就发送,则没有排队,因此没有优先级。
其他 qdisc 有不同的结构和策略。例如 SFQ qdisc:
考虑到这一点,让我们回到您的问题:
是的,根据 qdisc,来自 socket_11
的数据包可能会先于来自其他套接字的数据包发送。如果使用 pfifo_fast
,并且如果 socket_11
发送的流量足以使出站网络接口(interface)饱和,那么来自其他套接字的数据包甚至可能根本不会发送。这在实践中不太可能,因为通常很难在使其他资源饱和之前使网络接口(interface)饱和,除非它是无线接口(interface)。
数据包从机器的网络接口(interface)到套接字所采用的路径比网络本身快得多。而且,正如您还记得的那样,要使优先排序产生任何效果,就必须存在拥塞。在典型情况下,到达您的网络接口(interface)的数据包已经通过了网络传输的瓶颈,因此不太可能出现拥塞。
您当然可以使用 ingress qdisc或 other mechanisms人为地制造瓶颈,并优先考虑传入流量。但你为什么要这样做?只有在构建流量整形器或类似网络设备时,这才有意义。另外,由于这个 qdiscs 是一个低级别的机制,发生在更高级别的套接字之下(甚至在桥接或路由之前),我怀疑套接字的优先级会对 in 产生任何影响。
我不知道,但我很乐意学习。 This kernel module接近,但它似乎无法显示优先级标志,只能显示常规套接字选项。
关于linux - 设置 linux socket - high priority 的效果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37998404/
基于 socket.io 的官方网站 http://socket.io/#how-to-use , 我找不到任何术语。socket.emit 、 socket.on 和 socket.send 之间有
我正在使用 lua-socket 3.0rc1.3(Ubuntu Trusty 附带)和 lua 5.1。我正在尝试监听 unix 域套接字,我能找到的唯一示例代码是 this -- send std
这两者有什么区别? 我注意到如果我在一个工作程序中从 socket.emit 更改为 socket.send ,服务器无法接收到消息,虽然我不明白为什么。 我还注意到,在我的程序中,如果我从 sock
使用套接字在两台服务器之间发送数据是个好主意,还是应该使用 MQ 之类的东西来移动数据。 我的问题:套接字是否可靠,如果我只需要一次/有保证的数据传输? 还有其他解决方案吗? 谢谢。 最佳答案 套接字
引自 this socket tutorial : Sockets come in two primary flavors. An active socket is connected to a
我已经安装了在端口81上运行的流服务器“Lighttpd”(light-tpd)。 我有一个C程序,它使用套接字api创建的服务器套接字在端口80上监听http请求。 我希望从客户端收到端口80上的请
这是我正在尝试做的事情: 当有新消息可用时,服务器会将消息发送给已连接的客户端。另一方面,客户端在连接时尝试使用send()向服务器发送消息,然后使用recv()接收消息,此后,客户端调用close(
如何将消息发送到动态 session 室,以及当服务器收到该消息时,如何将该消息发送到其他成员所在的同一个 session 室? table_id是房间,它将动态设置。 客户: var table_i
这是我尝试但不起作用的方法。我可以将传入的消息从WebSocket连接转发到NetSocket,但是只有NetSocket收到的第一个消息才到达WebSocket后面的客户端。 const WebSo
我正在实现使用boost将xml发送到客户端的服务器。我面临的问题是缓冲区不会立即发送并累积到一个点,然后发送整个内容。这在我的客户端造成了一个问题,当它解析xml时,它可能具有不完整的xml标记(不
尝试使用Nginx代理Gunicorn套接字。 /etc/systemd/system/gunicorn.service文件 [Unit] Description=gunicorn daemon Af
我正在使用Lua套接字和TCP制作像聊天客户端和服务器这样的IRC。我要弄清楚的主要事情是如何使客户端和服务器监听消息并同时发送它们。由于在服务器上执行socket:accept()时,它将暂停程序,
我看了一下ZMQ PUSH/PULL套接字,尽管我非常喜欢简单性(特别是与我现在正在通过UDP套接字在系统中实现的自定义碎片/ack相比),但我还是希望有自定义负载平衡功能,而不是幼稚的回合-robi
我正在编写一个应用程序,其中有多个 socket.io 自定义事件,并且所有工作正常,除了这个: socket.on("incomingImg", function(data) {
在我的应用程序中,我向服务器发送了两条小消息(类似 memcached 的服务)。在类似 Python 的伪代码中,这看起来像: sock.send("add some-key 0") ignored
很抱歉再次发布此问题,但大多数相关帖子都没有回答我的问题。我在使用 socket.io 的多个连接时遇到问题我没有使用“socket.socket.connect”方法,但我从第一次连接中得到了反馈。
我尝试使用 socket.io 客户端连接到非 socket.io websocket 服务器。但我做不到。我正在尝试像这样连接到套接字服务器: var socket = io.connect('ws
我遇到了一个奇怪的问题。在我非常基本的服务器中,我有: server.listen(8001); io.listen(server); var sockets = io.sockets; 不幸的是,套
我正在使用带套接字 io 的sailsjs。帆的版本是 0.10.5。我有以下套接字客户端进行测试: var socketIOClient = require('socket.io-client');
这个问题在这里已经有了答案: What is the fundamental difference between WebSockets and pure TCP? (4 个答案) 关闭 4 年前。
我是一名优秀的程序员,十分优秀!