linux - X11 是否有 lifesign 或恒定流?

标签 linux x11

我有一个容错应用程序,其中 X 服务器请求在远程客户端上启动一个应用程序(通过某种其他机制)并接收并显示其 X 窗口。容错意味着服务器需要检测到与客户端的连接丢失,然后调用不同的备份客户端并在那里启动应用程序并显示窗口。

我的问题是 X11 协议(protocol)中是否存在一种机制,允许在 X11-Server 中可靠地检测连接是否已断开。

实验表明,当拔下电缆连接时,它需要一些 TCP 超时来检测套接字级别的连接丢失。这非常依赖于操作系统。在我们的例子中,大约 30 分钟后 X-Server 最终关闭了窗口。

因此,另一个假设可能是 X11 流不断地传递一些命令,并且服务器可以实现这样的逻辑:如果 X11 流在超时 y(例如 3 秒)内没有传递任何 X11 流量,我们假设连接丢失并主动关闭窗口并建立与后备客户端的连接。

这个假设是真的吗?我在 X11-protocol 中没有看到任何此类声明。关于如何检测连接丢失。是否有任何定期传输的明确生命信号?或者假设有持续的交通是否有效?或者在连接完全启动并运行时,是否会出现更长时间的不活动状态,即根本不传输任何内容?

有一个NoOperation来自客户端的可用于此类目的的命令。但是客户通常会把类似的东西作为生命标志吗?

最佳答案

I have a fault tolerant application, where an X Server needs to start an Application...

我不认为 X 服务器可以“启动应用程序”。可能是某些设置允许类似的东西,但通常不是这样。

...whether there exists a mechanism in the X11 protocol that allows to reliably detect in an X11-Server whether the connection has been broken or not.

不,它不存在。 X11协议(protocol)基于TCP/IP,不直接提供这种“心跳”。我认为假设是,如果您单击或以其他方式激活 X11 窗口,如果客户端应用程序消失,TCP 层将超时或抛出另一个错误。

I did not see any statement in the X11-protocol about how to detect connection loss.

There is a NoOperation command from the client that could be used for such purpose. But do clients usually implement something like that as a lifesign?

也许某些应用程序使用了 NoOperation,但目的可能与您需要的不同。我的意思是,从应用程序的角度来看,X11 服务器就像一个扩展;应用程序可能有兴趣知道服务器是否已启动并正在工作,但反之则不然。而且,无论如何,即使服务器可以检测到应用程序已经消失,也可能没有办法告诉服务器启动另一个应用程序。

可能会部署一个特殊的代理;它可以启动应用程序并监视连接(以两种方式),并在应用程序消失时采取必要的步骤。但话说回来,谁来监控代理应用程序?

关于linux - X11 是否有 lifesign 或恒定流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53816373/

相关文章:

linux - Linux 的远程桌面

c++ - Linux乐观malloc : will new always throw when out of memory?

linux - 如何在 linux 和 windows 上使用 xorg-x11 X 服务器?

linux - Wayland 合成器不能像在 X 上那样做窗口装饰吗?

opengl - 使用 X11 转发和 SSH 时,渲染在哪里执行?

linux - 困惑 : File ownership changed with setuid special permission flag

java - Hadoop 单节点与多节点

linux - grep 关键字后的下一行

c++ - Xlib。检查窗口是否重叠

c++ - 如何在 C++ 中使用 X11 知道按键?