V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Rieouu
V2EX  ›  程序员

请教各位大佬接收到的 tcp 数据怎么显示到前台页面,并存入 mysql 数据库

  •  
  •   Rieouu · 2018-07-21 15:24:01 +08:00 · 3086 次点击
    这是一个创建于 2077 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们实验室的一个物联网项目,底层的设备会把消息(温度,湿度)通过网关以 TCP 发给服务器,我们在服务器通过 netty 接收,这些温湿度消息需要显示到前台,请问怎么把 netty handler 收到的消息显示到前台,我们后台使用 Java SSM 框架处理的,不知道各位大佬有没有碰到过这种问题

    20 条回复    2019-10-17 09:05:53 +08:00
    Rieouu
        1
    Rieouu  
    OP
       2018-07-21 15:28:16 +08:00
    我们准备用 websocket 做推送,但是怎么把 netty 收到的消息通过 websocket 推送出去,查了好多资料都没头绪
    qiayue
        2
    qiayue  
       2018-07-21 15:28:17 +08:00   ❤️ 1
    netty 收到后存到数据库
    你说的前台是指浏览器端吧,直接从数据库取
    如果想实时显示数据变化,你还需要用到 websocket
    qiayue
        3
    qiayue  
       2018-07-21 15:30:21 +08:00
    netty 本身可以实现一个 websocket 服务,浏览器连上来就可以
    如果想简单实现的话,可以用 nodejs 或者 swoole 起 websocket 服务
    netty 通过 http get 形式向 websocket 服务传数据库
    luozic
        4
    luozic  
       2018-07-21 15:33:14 +08:00 via iPhone
    快速轮子和慢慢搞的轮子不一样啊。快速的有 nodejs 现成的轮子改改就行。严谨的带权限控制啥的 自己撸一个吧。
    Rieouu
        5
    Rieouu  
    OP
       2018-07-21 15:34:50 +08:00
    @qiayue 您的意思是通过 netty 实现 websocket 服务,再将 netty 收到的消息通过 websocket 服务推送出去?我们的思路是准备这么做的,谢谢
    Rieouu
        6
    Rieouu  
    OP
       2018-07-21 15:36:34 +08:00
    @luozic nodejs 有把 tcp 消息直接推送到前台的轮子吗?请问能贴出来给我参考一下吗?感激不尽
    Rieouu
        7
    Rieouu  
    OP
       2018-07-21 15:38:41 +08:00
    不知道有没有大佬做过物联网项目有过这种情况,就是把底层的 tcp 数据推送到前端页面,要有个现成的轮子就好了
    sagaxu
        8
    sagaxu  
       2018-07-21 15:39:01 +08:00 via Android
    sagaxu
        9
    sagaxu  
       2018-07-21 15:40:54 +08:00 via Android
    springboot 也有现成的 websocket 轮子,开箱即用
    Rieouu
        10
    Rieouu  
    OP
       2018-07-21 15:43:59 +08:00
    @sagaxu 谢谢,我赶快来看一下
    luozic
        11
    luozic  
       2018-07-21 15:44:45 +08:00 via iPhone
    Socket.IO 的官网教程里面就有。
    Rieouu
        12
    Rieouu  
    OP
       2018-07-21 15:52:57 +08:00
    @luozic 我去瞅瞅
    ryd994
        13
    ryd994  
       2018-07-21 16:32:11 +08:00 via Android
    直接存数据库或文件
    然后前天不停读文件刷新就好了
    几个温度值,能有多高的实时性?一般也没多少请求频率。怎么好写怎么写就行了。
    sampeng
        14
    sampeng  
       2018-07-21 22:30:02 +08:00
    不写 java 来答。。这不就是设计模式里面第一章的例子么。。。。

    原则上你所有收到的数据都在内存里。在这个进程里面所有的资源你都是可控的。。你就不能在一个工程里面起一个 netty 一个 websocket 吗?反正数据都在内存。。你想怎么玩不都随便你。要精确一点就得加锁
    sampeng
        15
    sampeng  
       2018-07-21 22:32:53 +08:00
    换我做就是把把你要的值弄在一个类似全局变量里面(全局对象,一定要可控)
    然后 main 里面起 3 个线程。一个做 netty。一个做 websocket 推送。一个把数据写回数据库做持久话。把全局变量给 3 个线程引用。加好锁。不是太复杂的逻辑问题吧
    Rieouu
        16
    Rieouu  
    OP
       2018-07-22 08:36:07 +08:00
    @sampeng 您这么一说我突然有思路了,通过全局变量实现数据共享,谢了哈
    vtoee
        17
    vtoee  
       2019-03-21 15:56:28 +08:00
    老哥的问题是否解决了,本人遇到的问题和你差不多,后台获取到前端数据,调用服务发送指令给硬件设备,netty 写的服务目前是 jar,预想这把 netty 写成可以接受 http 请求服务,后端获取到前端数据,发送请求给 netty 服务,发送给外界设备.
    Rieouu
        18
    Rieouu  
    OP
       2019-03-21 21:10:50 +08:00
    @vtoee 我做的时候保存了每一个硬件客户端和服务器之间的 TCP 连接,也就是 netty 里面的 channel,当需要发送给客户端时,直接 writeAndFlush 发送给对应的 channel 通道就行了,发送消息给客户端还是蛮好解决的,对了我的系统是单机的,后台 spring 和 netty 是耦合的
    vtoee
        19
    vtoee  
       2019-04-01 09:28:17 +08:00
    @Rieouu 客户端多的话 需要保存很多 channel 啊 ,另外 返回消息给客户端 消息数据需要去前端获取 这个怎么做的 保存 channel 是如何做的
    acme223
        20
    acme223  
       2019-10-17 09:05:53 +08:00
    你好,我现在做的项目和你做的这个特别像,关于服务器的那些代码您还有吗,我想参考一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3024 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 14:38 · PVG 22:38 · LAX 07:38 · JFK 10:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.