【发布时间】:2017-11-16 17:39:42
【问题描述】:
我正在尝试编写一个可以接受 tcp、http 和 mqtt 通信的服务器端 java 应用程序(接收和发送/MongoDB 作为存储)。通过研究,我们认为它可以是一个基于 Netty 和 paho for mqtt 的 jar 应用程序。我们有 3 个项目使用其中三种协议,因此我正在尝试统一连接模块。它们各自有不同的协议风格,例如:
-tcp: 0102330123456700
-http: HTTP POST /URL/count {"id":"02","count":"01234567"}
-mqtt: 主题/02/count {"count":"01234567"}
由于我们的时间有点短,我以一种愚蠢但快速的方式运行它们三个——3 个不同的线程监听 3 个不同的端口。
public class ServerLauncher {
public static void main(String[] args) {
NettyRestServer nettyRestServer = new NettyRestServer();
MqttServer mqttServer = new MqttServer();
EchoServer echoServer = new EchoServer();
new Thread(nettyRestServer,"HTTP Listening").start();
new Thread(mqttServer,"Mqtt Listening").start();
new Thread(echoServer,"socket Listening").start();
}
}
我的问题是:
- 既然都是基于tcp的,有没有什么好办法可以一起管理而不浪费线程资源呢?也许只运行一个线程来监听一个端口。我只找到单一协议的示例。
- 对于数据存储,将所有传入消息推送到跨所有线程/通道的 concurrentHashMap 是否是一个不错的设计。最后用另一个线程运行计划任务,将这个 concurrentHashMap 存储到 MongoDB 中并重置。或者可能使用队列而不是 concurrentHashMap
【问题讨论】:
标签: java multithreading mongodb sockets netty