基本情况 项目简介 参与人员:侯宇腾,甄轶同,符讯,王志勇 我们的项目是为了创建一个“练工器”,这个设备用来帮助锁匠提升开锁的技能。这个设备包含一个有100个锁的柜子,每个锁上都连接了一个传感器,这些传感器可以检测到锁是否被打开。这些传感器会把信息传递给一个微处理器,然后再传递给一台X86电脑。所有的程序都运行在这台X86电脑上。此外,一个客户可能会订购多台设备,所以这些设备需要相互同步状态和数据。
我们的任务是编写运行在X86电脑(触摸屏)上的软件,包括以下部分:
1.服务器:用来管理和同步所有设备的状态和数据。 2.用户界面:用来展示设备的状态,接收用户的输入,以及提供用户操作的界面。 3.数据库:用来存储设备的状态和数据。 我们计划使用微服务架构来组织软件。如果只有一台设备,那么这台设备就会有独立的服务器,用户界面和数据库。如果有多台设备,那么设备1会成为主服务器和主数据库,其他设备的客户端都会连接到这个主服务器。同时,客户端也会直接和每台设备的微处理器连接。
计划使用Java来编写客户端的代码,使用MySQL作为数据库,使用python/flask架构作为服务器,而客户端和服务器之间的通信可能会使用HTTP/HTTPS协议。
此外,可能还需要学习和使用JavaFX来创建用户界面,或者使用熟悉的swing界面。
总的来说,这是一个涉及到硬件接口、数据库管理、用户界面设计,以及网络通信的复杂项目。
开机流程——客户端,服务器同时启动,客户端直接连接对应的服务器,副服务器尝试向主服务器建立连接(可以在客户端中按键触发连接)。
项目状态 2023.8.1 起步 侯宇腾: 正在进行程序架构 需要进行的架构包括 1.客户端中,为了实现基础功能,java类和函数的规划 2.服务器给java预留的端口 3.数据库数据结构
2023.8.1 符讯: 研究UI使用swing还是javaFX
待解决问题 1.javaUI界面的开发使用swing还是javaFX ——符讯 解决:JAVAFX 2.是使用全异步开始比赛还是同步开始比赛 全异步:服务器给所有工位发送开始比赛的信息,工位可以不第一时间开始,而是出现:加入比赛的选项,但正在进行的练习或比赛不受影响。 优点:开发异步开始,即一台机器先后两个工人参加同一场比赛更加方便 缺点:需要悬浮窗,即接收到服务器消息后要出现“加入比赛的悬浮窗”/或者只有主界面能出现“加入比赛”的选项。swing不一定能构建易用的悬浮窗 同步比赛:服务器给所有工位发送开始比赛的选项,所有工位第一时间打断所有进程,根据服务器发送的用户信息和比赛信息开始比赛。 优点:只要服务器传递了工人信息,难度系数等所有必要信息,可以完全不管之前的状态,直接开始比赛。 缺点:需要考虑如何异步开始,难以处理特殊情况,进程的整理,保存状态相对比较复杂 ——侯宇腾 解决:暂时使用全异步开始的方式
3.要确定下来是用全http,全socket还是一半一半 http是客户端向服务器单向发送请求,服务器给一个回复,服务器不能主动联系客户端。这个相对来说比较方便。但我们确实有需要服务器主动联系客户端的部分,比如我在一台机器上设置了开始比赛,服务器需要告知所有的客户端比赛开始。如果用全http,就需要在客户端加入一个“检查比赛状态”,向服务器主动请求现在开启的比赛状态,服务器再去给客户端发数据。 socket是实时双向通信,但我不会,我也得学 一半一半可能是客户端向服务器的请求是http,服务器向客户端更新是socket
注意事项 1.所有客户端给服务器的请求都需要带上自己的机器编号和工位编号,因为你请求的服务器有可能需要直接转发给主服务器 2.服务器之间的通信完全模仿服务器和客户端之间的通信,用同样的api和同样的socket 3.对于不需要返回数据的函数,一般用1来表示成功,用errormessage来表示失败