1

想象一下这个场景,我有一个用 C 语言编写的适配器,它将消息写入 SAP(调用 RFC)。

仅当新消息到达“引擎”时才调用适配器,因此最多可以有 1 天或更长时间没有活动。这就是问题所在,连接句柄在标准代码中的“低级套接字”层/或 SAP 本身上的某些 SAP 参数可能会说“不再活动的终止句柄”无效

所以我现在要做的是生成一个“位于适配器顶部”的线程,并且每 10 秒左右对 SAP 进行一次 PIN。这里的问题是我使用相同的连接句柄向 SAP 发送消息以及 PING / HEARTBEAT 消息。

SAP 对 RFC 句柄说:

"一个 RFC 句柄可以在多个线程中使用,但一次只能在一个线程中处于活动状态。由一个线程创建的 RFC 连接的 RFC 句柄可以在另一个线程中使用,但这些线程必须同步访问到这把柄。

但是现在我尝试使用“pthread_mutex_lock”等来完成这项工作,但它没有。

我有一个全局“句柄”,当我的适配器 SHARED LIB 启动时,我启动一个线程,如下所示:

rc = pthread_create(&heartbeatThread, NULL, heartbeatThreadMainLoop, (void *)NULL);

而这个线程每隔 10 秒左右就对 SAP 进行一次 ping 操作。

在一个完美的世界里,我希望 MESSAGING to SAP 在这里优先,所以 PING 应该完全等到它“安静”然后重新启动。

我查看了以下链接:

http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html#SYNCHRONIZATION

但我实际上想锁定/解锁整段代码,所以正如我所说,如果 MESSAGE 进入 SAP,PING 线程必须等待......但是如果 PING 线程很忙,我想以某种方式中断它并说“嘿,我需要那个连接句柄来发送消息”......

什么是最佳实践“模式”?

帮助将不胜感激

谢谢

林顿

4

1 回答 1

0

整个架构可以通过增加 ADAPTER 的范围来简化。

与其主循环无限期地等待请求,不如让它在 10 秒后超时。如果超时,请执行唤醒逻辑。在任何一种情况下(请求或超时),重置计时器。

这避免了整个共享问题,并使 ADAPTER 负责与 SAP 的所有交互。

于 2012-04-19T19:17:24.513 回答