一、本周工作进度
我在本周的工作进度主要集中于两个技术要点——即Axios和WebSocket。这两种技术方法有着本质上的不同,因而具体实现出来之后的效果也有所不同,下面将会分别说明。
1.Axios(Ajax封装)
首先要谈的内容是Axios,Axios是一个基于 promise 的 HTTP 库,是目前前端最流行的ajax请求库。Axios的优势在于,相比传统的Ajax本身是针对MVC的编程,Axios更加符合现在前端MVVM的浪潮。而且Axios十分灵活,在浏览器端使用XMLHttpRequest对象发送ajax请求,在node环境则使用http对象发送ajax请求。
此外,在我看来,Axios的使用比起Ajax来说更加便捷。Ajax在使用时尚且需要定义出success等处理不同的后端反馈信息方法来进行定制化的通讯处理,而Axios可以只使用一个.then函数来处理所有的通讯结果,其内容根据后续反馈的response的具体内容来判断,可以使用更简易的if结构来直接处理,逻辑也更为清晰。而且Ajax在使用时还需要JQuery等库,需要调用$符号,而这个符号很容在不同的环境出现调用问题。
不过,Axios也并不是完全完美的,由于其HTTP的基本特性,很多问题也会暴露出来,我会在接下来的WebSocket部分具体说明并比较。
2.WebSocket
WebSocket是我们小组在参考了网上的一些项目之后发现的另一种前后端通讯技术,其原理与Axios(即Ajax)最大的不同在于,Ajax是基于HTTP协议实现的异步通信方式,本质还是通过三次握手然后建立连接,且该连接是单向的。
在这基础上,如果上传模型到聚合端服务器之后,聚合端联邦学习算法认定当前参与聚合的用户太少不予聚合,那么这个模型迭代训练就会少一步聚合过程,其变化就会变得比预期更快。这种情况下,如果继续选择使用Ajax技术来实现前后端的通信,那么就意味着,如果我们需要同步模型的每一轮迭代训练过程中的变化,那么Axios将会占用大量的资源,且会浪费大量的时间在握手连接上。
而WebSocket成功地解决了上述弊病。WebSocket并不是基于HTTP实现的