求个真相-多线程。
各位剑客黑客大侠前辈牛人老师,请帮助我看看我在某个帖子里面回答是否恰当。
话说那人问的是,server端怎么设计多线程。我平时都是写hello world 之类的程序突然间看见这么个话题,很感兴趣
于是上午重回答了下,就是没个人去指导下,我没做过那么高深的项目,只能意淫。难道大家都不怕我误导?
等了半天也不见有人拍砖,在见识今天一个哥们发生的丢包问题后,我也深深怀疑。我想知道,商业代码如果用多线程实现聊天室服务器端的话,大概个什么思路。
求教!谢谢
http://topic.csdn.net/u/20100203/00/d7bc6c2b-0a4e-4db2-8e1b-77882e5006e9.html?84563
加个人气的也有分。
[解决办法]
那就加人气咯
[解决办法]
~
[解决办法]
来就人气的
[解决办法]
1, server端启动时是否本身就是启动多个线程来监听同一端口还是说server端启动后 如果有客户端连接才启动一个线程跟这个client端通信, 如果两个都可以 那么监听同一端口 他们是怎么做到互斥的
监听用一个线程就够了,其他的向客户端收发数据才需要多线程。有的时候如果是使用异步,如果数据量不大,甚至不需要用多线程。
2, server端的线程在获得数据后 如何下发给指定的client端的 会不会有好几个client端发送过来数据,线程在处理后 发送回给client端时出现顺序错误 比如:A client端请求的数据,在多线程server端处理后却发给了B client端,如何保证他们发送的正确呢
服务器端要对相应的数据进行保存,并且对应每个客户端保存一个数据,可以用map,key是客户端的socket,value是相应的数据。如果有多个相同的数据分包接收的话,就合并value,等保存完了,或者处理完了,再按照key,找到对呀的client端,发送数据回去。
3,如果第1个疑问是两个都可以的话 哪个好呢 另一方面 一般server端多线程是怎么做的, client端又是怎么做的 是不是client端也是多线程的呢
一般client端不需要多线程。用异步io就可以了。而服务器的多线程,可以做一个线程池。也是线程管理器,对各个任务(一般是IO操作)进行处理。
4,如果client端时多线程 server端也是多线程的话 那么client端多个线程发送数据给server端 那么server端又是如何保证返回给client端的线程数据顺序肯定是正确的呢
如上所述,client端是不需要用多线程的,而TCP连接是能够保证数据顺序的,所以这个不成问题。但要是udp的吧,就够呛,也许需要模仿tcp那样用一个包头标识封包,然后在服务器端那边判断包头顺序处理。服务器那边需要进行保存数据,然后排序处理了。
我来抛砖引出美玉。
[解决办法]
请参考Microsoft SDK\samples\netds\WinSock\iocp\IocpServer.Cpp
[解决办法]
几种方案 1 . socket+线程池,每个客户端连接一个线程;
2. iocp;
3. 采用事件模式;
对于大并发量可以采用适当的分布式结构。
[解决办法]
嘿嘿。。。 一般碰到涉及网络的 我都绕开,因为我不会网络那套
如果是多线程 多进程问题,我还可以讨论一下。。。
[解决办法]
so 友情up 。。。
[解决办法]
up
[解决办法]
lu guo xuexi