客户端有个线程循环接收消息,这时客户端发送特定消息。如:发送退出消息,并且希望服务器端返回退出成功的消息。
开始是这样处理的,发送退出消息后就接收,但是客户端就死在哪儿了,查明原因发现socket是不允许同时多个方法去接收消息的,那样的话就会产生死锁。
第二种方法:我尝试先abort那个循环接收消息线程,还是失败,因为abort线程是需要一定时间的,而且TerminateThread有很多问题,所以也就没试过。
第三种方法:那就是在循环接收消息里进行处理,对消息类型进行判断,如果接收的是退出消息类型,然后出发事件来处理退出消息。测试成功。不知道还有其它什么方法没?比如异步操作?那位兄台告知,谢谢。
开始是这样处理的,发送退出消息后就接收,但是客户端就死在哪儿了,查明原因发现socket是不允许同时多个方法去接收消息的,那样的话就会产生死锁。
第二种方法:我尝试先abort那个循环接收消息线程,还是失败,因为abort线程是需要一定时间的,而且TerminateThread有很多问题,所以也就没试过。
第三种方法:那就是在循环接收消息里进行处理,对消息类型进行判断,如果接收的是退出消息类型,然后出发事件来处理退出消息。测试成功。不知道还有其它什么方法没?比如异步操作?那位兄台告知,谢谢。
?
wzd24(牧野),你看需不需要建议他用Socket的异步操作?估计他那个循环接收消息就是简单地抛到另外一个线程上了.
----------------------------------
客户端就不要去用异步了!太麻烦,而且又没有什么性能提升!他这个方案在客户端是很好的!
对于一个Socket,有一个线程发送、一个线程接收,这是很合理的。
恭喜你已经自己找到最佳答案了。
_______________________你的意思是说异步调用的开发繁琐,不容易理解还是说.NET这种异步调用的设计不好?
?
说到客户端,也就是说假设他只有一个Socket接收消息,好歹用线程也就是一个,不做异步也罢.至于性能,多个Socket接收不用说,异步肯定是好的,省了线程.如果只有一个Socket接收,我还真没比较过,也许差不太多.
----------------------------
服务端也不一定要用异步,有些情况下同步会更好一点!
?
这个东西的关键不在客户端或服务端,关键是看你有多少个Socket在同时接受.如果几个或十几个问题不是很大.我做的一些东西经常要有几百个Socket同时接收,如果起几百个线程去接收,系统的主要资源就全在维护线程了,性能不会好.我们有个类似的程序,结果是推倒重新写.
---------------------------------
几百个Socket???这当然要用异步,但楼主他只有一个Socket!