如何在 XMLRPC 中处理多个连接 Abyss Server - C++

发布于 2024-11-19 05:15:04 字数 912 浏览 5 评论 0原文

场景是下一个: 我有一个 XMLRPC-C++ 应用程序,正在侦听 PORT=8081 上的连接。它实现了一个 Abyss 服务器,使用 xmlrpc-c 库,如下所示:

xmlrpc_c::serverAbyss myAbyssServer(
        myRegistry, //handler of methods
        port,       //8081        
        "xmlrpc_log"   
        );

当我从调用许多 XMLRPC 方法的脚本创建多个连接时,它工作得很好。 脚本是这样的: 脚本1: rpc.method1(参数); rpc.method2(参数); rpc.methodN(参数);

如果我在执行此脚本时使用 netstat 和 xmlrpc_log 检查服务器中的连接,则输出类似于 XMLRPC-SERVER:8081 XMLRPC-CLIENT:SOME TIME_WAIT。尽管 XMLRPC_CLIENT IP 是相同的,但在 rpc.method 调用之前它会创建一个新连接。

当我在同一个客户端中执行其中两个脚本时,就会出现问题。这意味着,一个脚本中的 rpc.methodM(parameters) 调用与同一客户端中另一脚本中的 rpc.methodN(parameters) 同时执行。 这会导致服务器崩溃,并且 XMLRPC-SERVER 会保持关闭状态,直到重新启动该进程。

我阅读了 Abyss 帮助,并且 runOnce() 方法没有帮助。默认情况下,调用上面的构造函数,Abyss 服务器的 MaxConnections 默认为 30,超时为 15 segs。

是否有一些配置可以避免这种崩溃?我需要同时支持多个客户端和多个连接。

感谢您提供与此相关的任何帮助,

真诚地, 卢修斯。

The scenario is the next one:
I have a XMLRPC-C++ applcation, listening for connections on PORT=8081. It implements an Abyss Server, using the xmlrpc-c library as next:

xmlrpc_c::serverAbyss myAbyssServer(
        myRegistry, //handler of methods
        port,       //8081        
        "xmlrpc_log"   
        );

when I create multiple connections from a script calling many XMLRPC methods, it works fine.
the script is something like this:
Script1:
rpc.method1(parameters);
rpc.method2(parameters);
rpc.methodN(parameters);

If I check connections in the server with netstat and the xmlrpc_log when this script is executing, the output is something like XMLRPC-SERVER:8081 XMLRPC-CLIENT:SOME TIME_WAIT. Though the XMLRPC_CLIENT IP is the same, fore very rpc.method call it creates a new connections.

The problem appears when I execute two of this scripts in the same client. It means, the call rpc.methodM(parameters) in one script, is executed simultaneously with the rpc.methodN(parameters) in the other script, in the same client.
This produces a crash in the server, and XMLRPC-SERVER stay down till a restart the process.

I read the Abyss help, and runOnce() method will not help. By default, calling the constructor as above, the MaxConnections by default is 30, and timeout 15 segs, for the Abyss server.

Is there some configuration to avoid this crash? I will need to support more than one client at the same time and many connections simultaneously.

Thanks for any help related to this,

Sincerely,
Luchux.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

九命猫 2024-11-26 05:15:04

出色地。显然,服务器正在处理多个连接并支持 pthreads 的多线程。问题应该出在我的 RPC 调用执行的代码中,我猜是因为可重入/线程安全问题。

  • 在与其他项目合作一段时间后,我回到这段代码,问题出在自然语言库中,有一些不可重入的方法。他们解决了,我也解决了:) -

Well. apparently the server is handling the multiple connections and supporting multithreading with pthreads. The problem should be in my code executed by the RPC calls, I guess because a reentrant/thread safety problem.

  • After some break working with other project, I came back to this code and the problem was in a Natural Language library, with some not re-entrant methods. They solved it, I solved it :) -
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文