C++Builder 程序员博客
6 Aug
本人最近有个软件要设计。遇到了一些问题,请大家知道一下。我用的是TCP socket连接方式。
客户端发来很多命令,命令种类就几种,我这边的处理方式:将所有的命令放在链表中,然后几种一个线程处理,效率不高,但是如果用多线程处理,虽然命令传过来是按顺序的,但是这边处理可能存在乱序处理,造成客户端响应不正确。应该怎么办呢?
既然客户端的命令是需要串行处理的,那就没必要使用多线程进行并行处理,因为服务器同一时间应该不只是一个客户端,同一时间可以只分派一个线程来处理某一个客户连接的命令.另外一种就是对这些数据处理完之后进行一个排队之后再返回给客户端.
客户端既然可以进行命令的异步发送,那么命令跟命令之间就不应该存在先后依赖关系.那么问题就转变为仅仅只是客户端无法误别当前返回的数据是哪一个命令的应答,而如果你在应答内容当中增加上一个可语别的标识不就可以解决了?
是这样的,如果客户先后发送两条请求过来,我这边的接受顺序应该是正常的,但是如果由多个线程统一处理,如果处理结果存在乱序,这样返回给客户的处理就是错误的,这样会导致问题的。
而且向这种异步接受多客户端的命令,统一处理,在转发给多服务后端来满足客户请求的情况,可以采取什么设计模式呢。以前不认人考虑命令种类有限,考虑命令模式,但是好像命令封装不好,命令中处理的资源很多是全局的,封装性有问题,有没有别的比较合适的模式呢?求教!
….
可以由多个服务线程来处理多个不同的客户端请求;
另外安排一个线程专门用于返回信息给客户端,该线程负责按时序来获取各请求处理的结果,并逐一回应给客户端。
接收到的放到一个队列,然后由其他线程去取,应该没问题