前后台交互的逻辑处理问题请教
客户端(c语言实现)发送请求,等待服务端处理业务逻辑后返回数据,此时一直保持连接(超过60秒未应答则客户端判断业务超时)
客户端与服务端通信通过socket实现
问题是:客户端的请求到服务端后,服务端需要转到推送消息给手机端,手机端收到通知确认后再调用服务器端的请求进行通知(这里手机端和服务端是http请求进行交互),这里的问题是之前的客户端跟服务端的交互流程被打断了?手机通知服务端后怎么回到之前的流程,谢谢
不知道我描述的是否有点乱,欢迎大家回复
------解决方案--------------------用mina框架吧 会有个session保持连接,
客户端发送请求----->server 这时候会有个session1,相当于一个连接。
server------>手机端 :做推送时候必须是手机和server有连接,相当于手机登陆该server,这时候也会有个session2连接,手机端接到通知,发回确认信息(以请求的方式发过去)。用session1发给客户端。
不过这种交互都不是对应的 ,消息定义要规范,消息类型,每次请求要有唯一ID,这样才能保证请求和响应正确性。
------解决方案--------------------
这有啥不好做的,那边手机和服务器通信结束了,修改一个公用的状态值,这边跑个循环判断这个状态值是否变了,变了就继续往下走
------解决方案--------------------设计挺诡异的,居然卡住链接不释放。
客户端跟服务器的通讯中,服务器端可以设置sleep(),然后用一个中央管理模块管理服务器端线程。
当服务器接收到手机通知后,就调用中央管理模块给服务器端线程设置标志位,然后interrupt它;那么服务器的通讯线程就会苏醒,然后检查标志位看看是收到结果(成功)还是没有收到(超时失败)。
------解决方案--------------------
两种建议:
◎ 彻底解耦掉,也就是push消息给到手机端就算结束了;由专门负责取得手机确认消息的线程来拼装发送数据给客户端。
◎ 在push后,等待某信号量;然后由取得手机确认消息的线程来唤醒。