我正在编写一个套接字程序,它包含一堆从属进程,这些进程将位于计算机集群中的每台机器上,而主进程则指示它们将本地文件移动到远程节点上的远程从属服务器。这些从属进程的主要任务是从本地硬盘读取文件并将其传输到其他计算机上的其他从属服务器。我想拥有监听文件数据和发送内置于单个进程的文件数据的功能。
我可以在同一个进程中同时拥有发送和接收位吗?
//I want this to send a connect() request to every other slave node
initialize_Connections();
//Have an accept() call for accepting the connection requests from the other nodes
accept_Connections();
甚至可以推出这样的东西吗?我查看了在 initialize_Connections()和 accept_Connections()调用之间分配过程(即子进程调用initialize_Connections(),父进程负责accept_Connections( ))但这对某些神秘(对我而言)的原因并不奏效。
在这种情况下是否可以使用非阻塞connect()和accept()?
答案 0 :(得分:0)
使用线程不是必需的,您只需要设置一个侦听套接字,为每个传入连接触发套接字,并为连接与其他客户端建立一组套接字,并在每个套接字上为事件添加池/选择...
答案 1 :(得分:0)
我是否可以同时拥有发送和接收位 在同一个过程中?是否可以在此使用非阻塞connect()和accept() 情况?
是的,绝对的。您可以使用多个线程,或使用select()或poll()只使用一个线程来跨多个套接字复用非阻塞I / O.
这些方法都不是微不足道的100%正确,但它们是非常可行的。如果您想避免花费大量时间学习(和调试)多连接套接字编程细节,我建议使用一些为您做这类事情的中间件,而不是自己动手。我偏爱自己编写的library来处理这类事情,但也有other good ones。
答案 2 :(得分:0)
select()调用允许您在不输入阻塞调用的情况下为多个套接字提供服务。它要求您设置一些由 select()填充的结构。您可以迭代地调用 select(),检查结构以查看读取和/或写入其中一个指定套接字是否会立即成功。然后,您可以在打开的套接字上调用 read()或 write(),而不必担心它会无限期地阻塞。
答案 3 :(得分:-1)
我希望每个slave进程在两个永久线程上执行。在一个线程上,进程将连接到主进程,然后接收有关将文件发送到哪些其他从进程的指令。对于指令中的每个其他从属进程,该线程将创建一个临时线程来发送该文件。在另一个永久线程上,从进程将从其他从进程接收连接。对于每个连接,它将创建一个接收文件的临时线程。