如何设计socket软件
写简单的socket,有很多例子。
但是写稍微复杂一点的socket软件该怎么设计,代码耦合低,还要吞吐量大。
比如一个通讯软件,简单的接受发送,来个客户端,就给个线程,这样还是比较简单。
有很多例子。在深入一点该怎么弄?
如何把它封装好,udp和tcp可以复用?
服务器怎么管理多个客户端?
公共变量,除了加锁还有什么好方法没有?
收到的消息如何跟踪和管理?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
的确大。
现在因为网络延迟的关系。这类编程成为所谓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
等等这也只试图回答了一部分的问题。因为原问题太。。。
找个开源的socket框架看吧。例如HPsocket
现在开源的socket框架已经非常多了,而且比自己写的要稳定可靠,经过了很多公司的验证使用。
PHP里比较出名的高性能异步框架:swoole完全可以满足你的需求,这里是它的官网:http://www.swoole.com/
git上已经有三千多start了。
python里可以看看ws4py包,封闭了socket. 这是它的官网:https://ws4py.readthedocs.io/en/latest/
你的问题太大了,都可以写本书了
·大量并发比较流行的是用epoll来做,
·为了充分利用目前日益流行多核CPU资源,可以采用多进程方式
(相对多线程来说,个人比较喜欢多进程,简单安全)
·可以去了解一下NGINX高性能的设计原理,绝对收益匪浅
NGINX高性能的秘密:http://blog.jobbole.com/88766/
NGINX惊群问题的解决:http://blog.csdn.net/xiajun07061225/article/details/9260535
耐心看一下,方始知道服务器性能优化的博大精深和奥妙无穷