[英]Remote Procedure Call (RPC) in C++: Can multiple Clients listen to one server when endpoint is hard coded?
我正在使用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
服务器进程使用先进先出的调用队列来处理请求。
如果无法从客户端接收多个请求,是否可以设置端点池? 谢谢。
您在这里混淆术语。
服务器正在侦听TCP端口。 这意味着它将绑定到端口并在其上启动accept循环。 每当新客户端连接到该端口时,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
并行线程中处理请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.