忽然遇到一个问题,有没有在做物联网平台的朋友,就是设备与平台通过TCP保持长连接,通讯内容采用自定义协议报文。平时设备会主动往平台发送心跳包和一些日常数据,平台收到报文后同一解析。现在问题就是,当我从平台主动向设备发送请求消息,并等待消息返回,因为我TCP客户端采用的是aio接收报文并解析的,那么接收到的回复该怎么交给正在等待的线程。或者说应该怎么做,才能实现从平台发消息,然后等待设备的回复。

解决方案 »

  1.   

    回调的话,你可以参考Listener的设计模式,在发送之前add一个listener,收到数据后回调这个listner,listener可以保存一些用户敏感信息,收到的数据用客户敏感信息查找listener,或调找到的listener的接口方法就可以了
      

  2.   

    服务端建议用netty网络通信框架去实现,你只需要根据你自己定义好的数据结构写编解码器即可,发送接收数据都有接口。netty有个channel的概念,一个连接一个channel,这样面对多客户端连接时,服务器就知道是哪个客户端发的消息了,从而分别处理各自的数据。
    客户端连接服务端建立长连接时,客户端发一个注册/登录消息,里面包含客户端类型、ID等信息。
    服务端把这个连接和信息封装到一个Session里,并放进缓存里,比如ConcurrentHashMap里,有了客户ID,你想给谁发消息都可以了,客户端发来的请求或响应消息你也知道是谁发的了。
    这个不是一两句话就能说的清楚的,你去研究一下netty的原理就清楚了。
      

  3.   

    你都自己定义协议报文了,你加个字段描述一下不就区分了。怎么把数据回显到前台页面?不明白你都有数据了,显示到页面有什么问题。如果要实时性强点,用websocket跟页面交互数据。
      

  4.   

    那就用楼上的监听器模式了,数据处理类实现监听器接口,放到监听ArrayList里,接收到数据后就通知所有监听的类,这时你的数据就到了数据处理类里,想怎么处理就是你的事了。