我目前正在尝试使用C语言创建客户端 - 服务器程序,类似于网络邮件。问题是,我已经设法将我的服务器连接到客户端并使其正常工作,但现在我想引入另一个服务器并创建一个三元组:客户端连接到一个服务器,请求一些东西,如果该请求可以'如果满足,服务器1通过套接字将其发送到服务器2,以查看是否可以遵守。 我开始在服务器1中创建两个套接字 - 一个用于客户端,一个用于服务器2,具有相同的基本代码,因此它可以在一个端口上侦听客户端,另一个端口侦听到服务器2,但事实证明,接受'功能是阻塞的,所以一旦它连接到客户端,它就不会移动,除非服务器2说出来。
不确定我是否足够清楚,但任何建议都会受到赞赏。
谢谢
答案 0 :(得分:2)
如果您希望避免接受阻止,我建议您使用select。 它基本上等待(有超时)套接字,直到它有连接,然后才运行接受。
中找到一些示例代码答案 1 :(得分:1)
您有多种选择可以做您想做的事情:
基本多线程:启动第二个线程,连接到thread2中的服务器,并使用阻塞队列或类似的东西进行线程之间的通信。
正如Idan建议:使用I / O多路复用。 select()是最容易使用的imo,就我记忆而言,它可以很好地扩展到大约1000个连接。
拆分架构中的逻辑以提供一台服务器,联系该服务器以获取数据并在单独的进程(或甚至是机器)中运行其他服务器(对客户端不可见)以存储数据。在这种情况下,第一服务器并行或顺序地向其他服务器查询数据。我建议你设计一种策略,在这种情况下在服务器之间分配数据,以加快查询速度。