如何设计socket软件

发布于 2022-09-02 19:49:04 字数 210 浏览 17 评论 0

写简单的socket,有很多例子。
但是写稍微复杂一点的socket软件该怎么设计,代码耦合低,还要吞吐量大。
比如一个通讯软件,简单的接受发送,来个客户端,就给个线程,这样还是比较简单。
有很多例子。在深入一点该怎么弄?
如何把它封装好,udp和tcp可以复用?
服务器怎么管理多个客户端?
公共变量,除了加锁还有什么好方法没有?
收到的消息如何跟踪和管理?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

花期渐远 2022-09-09 19:49:04

的确大。

现在因为网络延迟的关系。这类编程成为所谓io bound。所以流行的做法是用async io来做。和传统的多线程是不同的。简单的说,就是用一个线程来做event loop。加上async, non blocking的网络io以及callback。省去了每次新建线程/进程的overhead。节省了内存。响应较快。但是async的编程方式比较反人类。需要适应。

建议看看 C10K problem: http://www.kegel.com/c10k.html。虽然比较老,但还是被人无数次引用。

你看来是用了python, 3.5里面加入了async io的支持。估计也就是用了epoll(), kqueue(), iocp等等

这也只试图回答了一部分的问题。因为原问题太。。。

第七度阳光i 2022-09-09 19:49:04

找个开源的socket框架看吧。例如HPsocket

自此以后,行同陌路 2022-09-09 19:49:04

现在开源的socket框架已经非常多了,而且比自己写的要稳定可靠,经过了很多公司的验证使用。
PHP里比较出名的高性能异步框架:swoole完全可以满足你的需求,这里是它的官网:http://www.swoole.com/
git上已经有三千多start了。
python里可以看看ws4py包,封闭了socket. 这是它的官网:https://ws4py.readthedocs.io/en/latest/

凡尘雨 2022-09-09 19:49:04

你的问题太大了,都可以写本书了

·大量并发比较流行的是用epoll来做,
·为了充分利用目前日益流行多核CPU资源,可以采用多进程方式
(相对多线程来说,个人比较喜欢多进程,简单安全)
·可以去了解一下NGINX高性能的设计原理,绝对收益匪浅

NGINX高性能的秘密:http://blog.jobbole.com/88766/
NGINX惊群问题的解决:http://blog.csdn.net/xiajun07061225/article/details/9260535
耐心看一下,方始知道服务器性能优化的博大精深和奥妙无穷

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文