已经发现当客户端 ws://127.0.0.1 连接上伺服器端后得到数据库的即时正确数据,唯有在触发ws://才会得到正确的数据,目前想到的方式是断开连接后 再次进行连线就可以触发 ws:// 而得到正确的数据,那么在不断开连接的情况下,该如何实现即时的数据呢??
既然是长链你可以推送给他
当然如果你不会写推送代码,我只能建议你换成SignalR,这是微软为了简化开发逻辑在ws的基础上封装的库
他有hub,你可以通过hub实时推送给对方
-----------原始ws没有hub逻辑,所以你需要自己维护一个session映射,有hub逻辑了,你想给谁推就可以给谁推
对比以下两边的代码
asp.net core 下ws服务的实现
https://blog.csdn.net/jh035512/article/details/127947848
SignalR的
https://www.cnblogs.com/inday/p/signalR-core-grace-call-client-methods.html
你会发现SignalR的有hub方便点,你不用自己维护映射关系了,简单的hub.Clients.XXXXX .XXXmethod就好
当然用了SignalR后客户端也的使用SignalR的封装,比如js的得用SignalRjs,java的得用SignalRjava
你可以考虑使用一些实时数据更新的技术,例如 Comet 技术。Comet 技术可以通过长轮询或者服务器端推送等方式实现实时数据更新。另外,也可以考虑使用一些实时数据更新的框架,例如 SignalR 等,这些框架可以提供更高效、更实时的数据更新服务。
根据WebSocketServer.clients.get(token)
方法,找到指定的客户端,然后进行信息推送token
来标识连接,则可让后端找到此客户端(演示的token是123)@RestController
public class SendMsg {
@RequestMapping("/sendMsg")
public String sendMsg(String msg,String token) throws IOException {
// 根据token找到客户端 给客户端去推送数据
WebSocketServer webSocketServer = WebSocketServer.clients.get(token);
webSocketServer.getSession().getBasicRemote().sendText(msg);
return "发送成功";
}
}
socket.onmessage
的函数方法执行)