【问题标题】:Client Server Program, two servers客户端服务器程序,两台服务器
【发布时间】:2014-12-03 14:56:53
【问题描述】:

我目前正在尝试用 C 语言创建一个客户端-服务器程序,类似于网络邮件。问题是,我已经设法将我的服务器连接到客户端并让它正常工作,但现在我想介绍另一台服务器并创建一个三元组:客户端连接到一个服务器,请求一些东西,如果该请求可以'如果不满足,服务器 1 通过套接字将其发送到服务器 2,看是否可以满足。 我首先在服务器 1 中创建两个套接字 - 一个用于客户端,一个用于服务器 2,具有相同的基本代码,因此它可以在一个端口上侦听客户端,并在另一个端口上侦听服务器 2,但事实证明' accept' 函数是阻塞的,所以一旦它连接到客户端,它就不会移动,除非服务器 2 说出来。

不确定我是否足够清楚,但任何建议都将不胜感激。

谢谢

【问题讨论】:

  • 请贴一些代码!您是否尝试将第二个套接字放在不同的线程中?
  • 我认为您不能在 C 中启动“线程”。这可能是套接字是在 exec 或类似的并行进程中启动的。但是,这是 O/S 级别的多任务处理。
  • 关于我之前的评论,我收回了……不知道 pthread 的东西 (yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html)。对不起,如果我混淆了任何人。

标签: c sockets tcp client-server


【解决方案1】:

如果您希望避免接受阻止,我建议您使用select。 它基本上在套接字上等待(超时),直到它有连接,然后才运行接受。

你可以在my sockets programming guide找到一些示例代码

【讨论】:

    【解决方案2】:

    你有几个选择去做你想做的事:

    1. 基本多线程:启动第二个线程,连接到线程 2 中的服务器,并使用阻塞队列或类似的东西在线程之间进行通信。

    2. 正如 Idan 建议的那样:使用 I/O 多路复用。 select() 是最容易使用的 imo,据我所知,它可以很好地扩展到大约 1000 个连接。

    3. 在您的架构中拆分逻辑以提供一台服务器,该服务器被联系以获取数据并在单独的进程(甚至机器)中运行其他服务器(客户端不可见)以存储数据。在这种情况下,第一台服务器并行或顺序地向其他服务器查询数据。在这种情况下,我建议您设计一种策略来在服务器之间分配数据以加快查询速度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 2020-07-28
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多