使用套接字在两个服务器之间发送数据是一个好主意,还是应该使用MQ之类的东西来移动数据.
我的问题:如果我只需要/确保交付数据,那么套接字是否可靠?
还有其他解决方案吗?
谢谢.
我有一个连接到多个服务器的C#客户端应用程序.我注意到,当客户端计算机上有如此多的流量时,必须使用NetLimiter激活的规则才能使我的客户端以更高的优先级正确连接.
我没有找到任何关于如何在此应用程序中以编程方式嵌入和制定规则的文档.但是,我在这里读到有人试图使用Netlimiter API但失败了.
我在某处读到我可以编写自己的应用程序,在这里使用Windows的TC API 并标记DSCP以确定优先级.但是在设置C#应用程序的流程选项之前,我已经解决了这个问题.
请指导我这个问题.
我有一种系统可以不断地从Java后端向Web前端发送消息.我使用Openfire和XMPP协议作为传输系统.但是XMPP只是一种传输协议,它不保证在互联网连接断开的情况下交付.所以首先我决定改用更轻的传输协议 - WebSocket.而WebSocket又是一种传输协议.是否有基于WebSockets的生产就绪和免费消息传递框架,支持消息保证传递.您只需使用clientId发送消息,该框架将完成剩下的工作.如果用户处于脱机状态或Internet连接已关闭.我的意思是该框架将关心交付.
我正在尝试实现一个JAVA应用程序,目的是发布到特定的MQTT主题.该消息应与QoS 2一起提供(仅提供一次).
但我似乎忘记了我的实现中的任何内容(下面的JUnit实现的代码),所以尽管没有客户端订阅我的主题,但似乎总是传递消息.有谁知道我的错是什么?
我在Ubuntu 12.04上使用mosquitto MQTT代理,在JAVA端使用Eclipse Paho.
MqttAsyncClient client = new MqttAsyncClient("tcp://localhost:1883", MqttClient.generateClientId(), new MemoryPersistence());
try {
client.connect().waitForCompletion();
}
catch (MqttException e) {
throw new RuntimeException("Failed to connect message-broker. Maybe it has to be started via typing \"sudo mosquitto\" in a new terminal window.");
}
client.setCallback(new MqttCallback() {
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
// No part of that test
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
throw new RuntimeException("Message with QoS 2 marked as delivered, …Run Code Online (Sandbox Code Playgroud) 我是MQTT的新手,我刚刚了解了在发布消息时决定的QOS级别的含义:
我注意到用户端也可以设置" 他们将收到的最大QOS级别 ".引自这里:
例如,如果在QoS 2上发布消息并且客户端订阅了QoS 0,则该消息将以QoS 0传递到该客户端.
这是否意味着尽管发布者将其与QOS 2一起发送,但该消息可能无法到达客户端(QOS 0)?
这可能是缺乏经验的开发人员的一个大问题 - 例如,npm mqtt包中的subscribe函数的默认QOS 为0!(在我看来,默认值应该是最大值2,即"让出版商决定QOS").
首先,我想首先说我对 Gstreamer 及其功能真的很陌生,所以如果我的理解或实施有误,请原谅我的无知,我仍在学习 .
我想在PYTHONor JAVA(因为我不精通C)中构建一个小型流应用程序,其中集成了QOS,特别是对于包丢弃计数统计,RTP和RTCP似乎是完美的搭配。
为此,我实现了一个 SERVER
#! /usr/bin/env python
import gi
import sys
gi.require_version('Gst', '1.0')
from gi.repository import GObject, Gst
#gst-launch -v rtpbin name=rtpbin audiotestsrc ! audioconvert ! alawenc ! rtppcmapay ! rtpbin.send_rtp_sink_0 \
# rtpbin.send_rtp_src_0 ! udpsink port=10000 host=xxx.xxx.xxx.xxx \
# rtpbin.send_rtcp_src_0 ! udpsink port=10001 host=xxx.xxx.xxx.xxx sync=false async=false \
# udpsrc port=10002 ! rtpbin.recv_rtcp_sink_0
DEST_HOST = '127.0.0.1'
AUDIO_SRC = 'audiotestsrc'
AUDIO_ENC = 'alawenc'
AUDIO_PAY = 'rtppcmapay'
RTP_SEND_PORT = 5002
RTCP_SEND_PORT = 5003
RTCP_RECV_PORT = …Run Code Online (Sandbox Code Playgroud) “服务类型”定义为 IPv4 标头中的第二个字节。尝试在我们的 Mac OS 应用程序上的出站 UDP 流量中设置此字节。到目前为止我看到的每个例子都使用了setsockopt
int tos = 0x60;
unsigned int tos_len =sizeof(tos);
int sockopt_return = setsockopt(pMediaSocket->socket, IPPROTO_IP, IP_TOS, &tos, tos_len);
Run Code Online (Sandbox Code Playgroud)
sockopt_return 返回零表示没有错误,但是每个出站数据包都将此字节设置为 0x00。我如何设置这个字节?
这不再适用于 Mac OS 吗?如果有任何区别,我正在使用 Majave 10.14.6
我找到了有关如何提升操作和操作队列的 QOS 的文档: https://developer.apple.com/library/archive/documentation/Performance/Conceptual/EnergyGuide-iOS/PrioritizeWorkWithQoS.html
但还没有找到任何关于dispatchQueues的信息。QOS 分配有以下三种方式:
到 DispatchQueue 本身
当我们将任务分派到dispatchQueue时: func async(group: DispatchGroup?, qos: DispatchQoS, flags : DispatchWorkItemFlags,execute: () -> Void)
我们可以为dispatchWorkItem本身分配一个QOS
我想知道当这些QOS不同时,QOS如何提升。
如果我正确理解 Kubernetes OOM 杀死 pod 或容器的条件(来自 komodor.com):
如果容器使用的内存超过其内存限制,则会以 OOMKilled 状态终止。同样,如果节点上所有容器或所有 pod 的总体内存使用量超过定义的限制,则一个或多个 pod 可能会被终止。
这意味着,如果 Pod 中的容器超过总内存,它将被杀死(容器),但 Pod 本身不会被杀死。同样,如果一个 Pod 中有多个容器,并且该 Pod 本身超出了其内存限制(即该 Pod 中所有容器的内存限制之和),则该 Pod 将被 OOM 杀死。然而,只有当其中一个容器超过其内存限额时,后一种情况才可能出现。这样的话——容器不是会先被杀死吗?
我试图了解 pod 而不是容器被 OOM 杀死的实际情况。
我还注意到,当 Pod 中有一个容器并且该容器反复超出其内存限额时,Pod 和容器会间歇性地被终止。我观察到这一点 -容器将重新启动,这可以通过观察 Pod 中的日志来观察到,并且每隔一次 - Pod就会被终止并重新启动,从而增加其重新启动计数。
如果它有助于理解行为 - Pod 的 QOS 类别是Burstable。
我认为我们可以只使用publish和pubrcv来满足QoS2。
当服务器接收发布数据包时,保存到db,然后服务器将其发布到其他客户端,例如。客户B。即使我们从ClientA接收两个相同的发布数据包,服务器也会检查db,并且知道这是重复的消息,因此不要发布到ClientB。
所以我认为不需要4个数据包。
我的逻辑正确吗?