我在 Linux 中使用 TAO 的通知服务实现了一个发布-订阅服务器对。有两个服务器 E1 和 E2。E2 订阅了新闻类型,例如 1,E1 订阅了新类型,例如 2。E1 发布类型 1 的新闻,随后 E2 进行一些计算并发布 E1 获得的新闻类型 2 的结果。这个循环继续。这些事件属于 CosNotification::StructuredEvent 类型。问题是,系统在服务器的两个终端上执行了一段时间后都会给出很多错误消息。
TAO (2723|139817071765312) - ServerRequest::tao_send_reply_exception,无法发送异常回复
我是 TAO(以及 CORBA)的初学者,所以我不确定这个问题是否是因为线程。如果我在 E1、E2 或两侧使用以下 svc.conf,事件通信会变得非常慢:
静态 Server_Strategy_Factory "-ORBConcurrency thread-per-connection" 静态 Client_Strategy_Factory "-ORBWaitStrategy rw -ORBTransportMuxStrategy 独占 -ORBConnectStrategy 阻塞 -ORBConnectionHandlerCleanup 1" 静态 Resource_Factory "-ORBflushingStrategy 阻塞"
我从TAO的网站复制了上述选项,每个连接一个线程,认为错误可能是由于达到线程限制引起的。此外,我尝试在 E1 和 E2 的两侧都将 -ORBConcurrency thread-per-connection 作为命令行选项。这会导致某些 CORBA 异常无法启动服务器。以下是我用于运行我的系统的命令,它给出了 ServerRequest::tao_send_reply_exception,一段时间后无法发送异常回复消息:
tao_cosnaming -ORBEndPoint iiop:localhost:12345 -ORBDaemon // 启动名称服务 tao_cosnotification -ORBDebugLevel 10 -ORBInitRef NameService=corbaloc:iiop:localhost:12345/NameService -ORBDaemon // 启动通知服务 ./E1 corbaloc:iiop:localhost: 12345/NameService // 启动 E1 ./E2 corbaloc:iiop:localhost:12345/NameService // 启动 E2
谁能建议这里发生了什么以及如何处理这个问题?