使用 C# Websocket 数据库不会即时更新

已经发现当客户端 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 等,这些框架可以提供更高效、更实时的数据更新服务。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/781939
  • 这篇博客你也可以参考下:ws搭建websocket服务器
  • 除此之外, 这篇博客: 如何使用websocket实现推送信息到客户端中的 后端推送数据给前端(客户端) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 演示接口,根据WebSocketServer.clients.get(token)方法,找到指定的客户端,然后进行信息推送
    • 在前端进行websocket连接的时候,就有放入唯一的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.js代码中socket.onmessage的函数方法执行)
      在这里插入图片描述
    • 则对应token为123的客户端接收到信息
      在这里插入图片描述
  • 您还可以看一下 谭亮老师的websocket实现斗鱼弹幕系统课程中的 服务器的消息如何发给客户端小节, 巩固相关知识点