尝试在c中实现并发TCP服务器和客户端

Posted

技术标签:

【中文标题】尝试在c中实现并发TCP服务器和客户端【英文标题】:Trying To Implement Concurrent TCP Server and Client in c 【发布时间】:2011-03-13 16:55:02 【问题描述】:

我已经使用线程和分叉在 c 中实现了 TCp 并发服务器和客户端。 但我没有办法检查是否有任何其他标准的实施方式 这个。

我已经查看了标准编码的东西,但没有发现任何有用的东西。 有人可以分享一些好的链接或代码,这样我就可以有一个标准的想法 实现并发服务器。

感谢您的帮助

【问题讨论】:

“并发服务器”是什么意思?处理多个客户端连接? 我几天前回答过类似的问题-***.com/questions/5267535/… @Brian : 是的,同样的......还有客户端和服务器之间的全双工通信............ 另请参阅有关事件驱动网络服务器的问题的答案:***.com/questions/3981566/… 【参考方案1】:

没有“标准的想法”。您的方法将取决于需求、性能、可伸缩性和允许的开发时间。

每个客户端一个线程 可能带有线程池 多线程管道模型,有 N 个工作线程 每个服务器一个线程,使用轮询/选择 每个服务器一个线程,基于事件和回调 分叉子节点,每个客户端连接一个 预分叉子代,例如Apache 网络服务器

等等。所有这些都有它们的用途。

【讨论】:

【参考方案2】:

一些不错的链接:

Beej's Guide to Network Programming 将帮助您了解基础知识, The C10K problem 将为您提供设计景观的概览, High-Performance Server Architecture 会让你重新思考“标准”方法。

希望这会有所帮助。

【讨论】:

【参考方案3】:

并发服务器(只要它们非常简单,并且性能不是什么大问题)通常使用poll() 或select() 创建。现在,这是假设您在 *nix 上。 如果你会使用 C++,boost 库有 ASIO ,这是一个跨平台库,允许你编写一次,到处编译。由于想法因操作系统而异。

【讨论】:

以上是关于尝试在c中实现并发TCP服务器和客户端的主要内容,如果未能解决你的问题,请参考以下文章

如何在socket编程的Tcp连接中实现心跳协议

TCP-IP 套接字 C:尝试连接到服务器套接字时出现错误地址错误

是否有一个选项或命令可用于禁用/卸载/或停止 linux 中的 tcp/IP 堆栈。需要它在服务器应用程序中实现用户空间 tcp

是否有我可以用来在 C++ 中实现 RPC(客户端-服务器)的设计模式

C 语言网络编程 — 高并发 TCP 网络服务器

C 语言网络编程 — 高并发 TCP 网络服务器