C ++中的远程过程调用(RPC):当端点被硬编码时,多个客户端可以监听一个服务器吗?
Posted
技术标签:
【中文标题】C ++中的远程过程调用(RPC):当端点被硬编码时,多个客户端可以监听一个服务器吗?【英文标题】:Remote Procedure Call (RPC) in C++: Can multiple Clients listen to one server when endpoint is hard coded? 【发布时间】:2017-08-29 14:02:39 【问题描述】:我正在使用MIDL
和RPC
编写一个简单的服务器客户端来允许文件传输。
它在端点被硬编码时起作用,如下所示:
服务器端
status = RpcServerUseProtseqEp(
reinterpret_cast<unsigned char*>("ncacn_ip_tcp"),
RPC_C_PROTSEQ_MAX_REQS_DEFAULT,
reinterpret_cast<unsigned char*>("8888"),
NULL);
客户端
status = RpcStringBindingCompose(NULL,
"ncacn_ip_tcp",
(RPC_CSTR)"127.0.0.1",
"8888",
NULL,
NULL);
我想知道当端点被硬编码时,多个客户端是否能够连接到一台服务器?众所周知,在使用 TCP 协议的套接字编程中,两个应用程序不能同时连接到一个端口。但是,MSDN
引用说RPC
服务器进程使用先进先出的调用队列来处理请求。
如果无法接收来自客户端的多个请求,有没有办法设置端点池?谢谢。
【问题讨论】:
服务器通常会监听客户端的请求。你想检查这个短语吗? 【参考方案1】:您在这里混淆了术语。
服务器 正在侦听 TCP 端口。这意味着它绑定到端口并在其上启动接受循环。每次有新的客户端连接到这个端口,accept函数就会与那个客户端建立一个TCP连接,然后返回监听这个端口。
服务器应用程序是多线程或异步应用程序,可同时处理多个操作:侦听新客户端、与每个连接的客户端通信并执行实际工作。
典型的 RPC 服务器看起来像
status = RpcServerUseProtseqEp(pszProtocolSequence,
RPC_C_LISTEN_MAX_CALLS_DEFAULT,
pszEndpoint,
pszSecurity);
if (status) exit(status);
status = RpcServerRegisterIf(my_rpc_interface_spec,
NULL,
NULL);
if (status) exit(status);
status = RpcServerListen(cMinCalls,
RPC_C_LISTEN_MAX_CALLS_DEFAULT,
0);
if (status) exit(status);
RpcServerListen
调用将永远阻塞,启动cMinCalls
工作线程并执行accept
循环,接受连接并在最多cMinCalls
并行线程中处理请求。
【讨论】:
以上是关于C ++中的远程过程调用(RPC):当端点被硬编码时,多个客户端可以监听一个服务器吗?的主要内容,如果未能解决你的问题,请参考以下文章