问题描述
楼主目前公司是做ERP系统的,目前一个项目是在阿里的钉钉里做一个微应用供我们的客户查询其报表,审核消息等功能。其中微应用实质上是一个HTML5页面(下简称微应用),客户的数据是放在各自的服务器的数据库中,由于客户很多没有固定的IP地址,因此目前提出做一个中间件放在阿里云上供微应用和客户的数据进行通信传递,整个中间件使用.net平台进行编写。由于微应用只是发送一些HTTP请求来获取数据(目前全是GET请求),因此在中间件中使用了一个TCPListener对为应用发送的请求进行监听和解析,获取到需要向客户请求的参数和数据。中间件中还包含一个Socket服务器,客户会使用我们写的socket客户端连接socket服务器,其中客户端可以根据得到的指令去操作客户数据库并返回数据。当中间件收到微应用发送的请求时,解析到参数,然后会通过socket服务器发送信息到相应的socket客户端,等待客户端返回数据后,返回数据给微应用进行数据展示。目前遇到的问题,中间件接收到微应用请求时,需要等待socket服务器发送出信息并返回数据以后再返回,这段时间HTTP请求会一直等待,整个过程是同步的,当很多微应用请求时,效率会非常低,请问大神有更好的结构设计吗?
解决方案
解决方案二:
首先,不要滥用“中间件”这种词儿。就说是“业务服务器系统”就行了。其次,即使HttpListner接收了几万条消息,怎么就会“效率会非常低”呢?一定是这个过程中你们是用了同步、死等的机制,造成系统资源浪费了成千上万倍。
解决方案三:
2个办法仅供参考1.web端改用websocket2.web端改异步访问,第一次请求后,如果cache没数据,则返回给web一个回执(令牌),同时服务器向erp请求数据,回来的数据先放到某个cache的内存里,等下一次web再用回执访问时,返回这个回执所对应的数据。