繁体   English   中英

C ++中的远程过程调用(RPC):当端点进行硬编码时,多个客户端可以侦听一台服务器吗?

[英]Remote Procedure Call (RPC) in C++: Can multiple Clients listen to one server when endpoint is hard coded?

我正在使用MIDLRPC编写一个简单的服务器-客户端,以允许文件传输。 当端点进行如下硬编码时,它可以工作:

服务器端

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM