总结三
近期工作
1.分布式连接测试
上周全组同学通过腾讯会议进行了分布式连接的测试。首先,我们实现的分布式连接是通过python的socket网络编程实现的,客户端需要知晓服务器端的ip地址进行连接,我们先是连接了校园网(也就是sdu_net)进行了测试,在windows命令行输出ipconfig查看服务器的ip进行测试,结果是在服务器端开放连接端口之后,客户端未能在规定的时间建立连接。
通过百度原因得知,套接字是一种通信机制,客户/服务器系统开发工作既可以在本地单机上进行,也可以跨网络进行。linux所提供的打印服务、连接数据库、远程登录和用于文件传输的ftp通常都是通过socket来进行通信。套接字与管道的区别是套接字明确的将客户与服务器区分开来,可以将多个客户连接到一个服务器上。套接字主要应用于网络通信,网络的层次也是我们需要了解的。网络层次从底层到上层分为媒介---->数据链路层---->网络层---->传输层---->应用层。数据链路层提供硬件接口,网络层包括IP协议,传输层包括TCP/UDP协议,应用层即用户进程应用程序。而socket位于应用层与传输层之间,可以看做一个抽象的层次,一组接口。应用程序通过socket将数据送到传输层,而不用管具体的TCP/IP协议。[1]
也就是说,建立在无线校园网的socket网络连接无法满足要求,因此后来我们尝试服务器端连接网线,重新在命令行输出ipconfig获得ip地址,重新建立连接,客户端与服务器端成功建立连接并互传数据。
再后来我们考虑到服务器端是做模型聚合的需要运行在从指导老师那里获得的真正的服务器上,是否能够建立连接还不清楚,经过咨询专业人士得知情况和通过网线连接是一样的,至此我们的分布式连接测试圆满完成,到目前位置,我们总共解决了客户端前后端的传输,解决了分布式传输,了解了,联邦学习一般互传的数据是字典格式的(可以直接传输,也可以封装成对象传输)。
在上述过程中,我的贡献是找寻到了python的socket网络连接解决分布式连接问题,扮演客户端请求服务器建立连接,多次尝试最终解决问题,指挥了每周的腾讯会议成果分享活动。
2.WebSocket学习
上周的问题汇总中提到了一个关键问题,就是联邦学习是一个持续的过程,如何进行实时的结果展示,如果是以往的axios异步传输,一个客户端的请求只能对应一个服务器端的反馈,如果要做到实时展示,就需要客户端不断请求服务器端发送当前更新数据,这个过程是非常消耗资源的,这时候组员提出了WebSocket。WebSocket的原理在于客户端提出请求后while(true)进行忙等,等待服务器端传输数据,这样就解决了实时展示的问题,只需要将以往的数据和是否终止循环的条件封装成一个对象传输过去就可以解决这个问题,于是乎负责前后端通讯的同学(包括我)开始去了解和掌握WebSocket技术。
参考文献
[1] https://blog.csdn.net/weixin_33623134/article/details/112890232