如何提高socket并发数和性能?? 400 报错 最近在写socket服务器,用的多线程并发,但是并发数太少了,想用epoll 的,但是epoll接收数据容易出错!
怎么容易出错呢。才用的话建议用水平模式,一直提醒你接受,出错点在哪呢?######回复 @云松 : 呵呵,已经非常感谢您的回答了!######回复 @yushadow : 队列是我能想到的最简单的方式了,抱歉帮不了你了######回复 @云松 : 我实际写的时候是用协议的,每条数据的最前面4个字节用来表示后面数据的长度,我会先接收4个字节,然后判断长度,再接收后面的数据。 想到消息队列的方法了,但是觉得有些麻烦,就想问问有没有更好的办法######回复 @yushadow : 边缘模式倒是多了个判断数据是否读取完了的判断,这需要你自己的经验,很多老手都容易出错 。还有建议用一个自定的协议去保证数据的完全(我常用tlv格式),你在处理的时候根据length去截断或者合并流,至于你说接受和处理跟不上,我应该用个消息队列,然后队列的另一端用你的多个处理线程去处理######我用的是边缘模式!######接收的数据容易是错误的,后来写了一个接收数据不出错了,但是如果一直接收数据然后处理,处理速度可能跟不上接收的,所以经常会就堵死了,程序就卡在那不动了。######我用的是边缘模式!######你得用epoll + 线程池######不太会写线程池,您那有线程池实例吗?之前有用过apache apr库的线程池,可能不太会用的关系吧,还是不行啊!######
epoll并不负责数据的接收,只负责套接字存活,是否有数据的检测
接收数据出错,可能是你读写套接字数据时没处理好
epoll是Linux下进行并发tcp服务器编程的首选,比select, pselect, poll好多了
######这是我提的另一个问题,这里有源码,当然,这只是一个测试的代码,真用的时候会对接收的内容进行处理。http://www.oschina.net/question/1249718_126025######你说的这些我都知道啊,可是同样的接收函数,用多线程并发就没问题,改成epoll就不行了,不知道为什么。######nio######linux C######C不懂 ,不过 nginx不是有 源码吗 ?搞下来研究一下。去看 ACE
######erlang,无限的new新进程
内存足够大,erlang就跟的进来.1百万是没啥问题.不知道你要满足多少,再不多就分布式,不过估计网卡受不了
######我用linux C呢版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。