Socket服务端向指定客户端发送消息
- 解决思想
- 1.项目背景
- 2.如何上传与下发指令
- 3.解决方法
- 4.流程
解决思想
I.指定客户端远程地址是存起来的。
II.服务端直接主动发信息给客户端,问题在于如何触发服务端下发信息。用线程新建一个客户端,发送消息给服务端,服务端接受消息后触发下发消息。
1.项目背景
最近在开发一个物联网项目,与硬件的通信是通过socket通信,之前做的都是web开发,网络编程用得比较少,从头开始。现学现卖。
我的项目大概就是硬件有一个开关,通过网络控制开启与关闭。
2.如何上传与下发指令
硬件客户端通过socket通信。服务端提供socket服务端与硬件客户端连接(长连接),硬件客户端给服务端上传信息容易,只要连接上了可以随时发送消息。但是服务端如何下发指令,如何去出发下发指令,这是个问题。
3.解决方法
网上搜索了一圈,没有太过直接答案,借鉴经典案例多人聊天室案例,多人聊天室的场景是:多个个客户端连接上服务端以后,任意一个客户端发送消息给服务端,服务端会把消息发送给连接服务端的其他客户端。
有多人聊天室这个案例后,稍微改动一下,服务端主动下发信息这个问题,转换一下思维。起点在服务端。不好解决,不好触发。如果服务端模拟一个客户端,连接自己,发送下发信息,服务端再下发信息给客户端,这就容易多了,基本与多人聊天室场景相似。
原始的问题是: 服务端---->硬件客户端
修改后的逻辑:模拟客户端---->服务端---->硬件客户端。
4.流程
1.Web页面点击关闭按钮,web服务新建线程新建模拟客户端连接socket服务端,发送关闭指令串。
2.Socket服务端收到指令串,发送给硬件客户端。
3.硬件客户端执行关闭操作。
4.硬件客户端上传关闭完成信息。
5.Socket服务端收到关闭完成信息,新建线程通知web服务器更新数据库
6.跟新数据库,回显示到页面