java - ZeroMQ 运行服务器 Java
问题描述
我目前正在尝试开发一个服务器,该服务器基本上应该随时从未知数量的客户端获取传入数据。即系统将有多个客户端发送数据,而服务器的工作基本上只是收集数据并将其保存到数据库中。
现在我希望服务器连续运行。现在服务器只收到一个客户端并关闭。如果我说围绕接收和打印消息部分做一个 while(true)- 循环,它甚至不会做一次。
正如我可能理解的那样,REP REQ 不是最好的模式,让服务器获取传入数据的最佳模式是什么?
使用 Curve(又名 Ironhouse 模式),客户端需要拥有服务器证书,假设一个想要向服务器发送数据的新客户端应该如何访问服务器证书?我从 ZMQ 指南或其他站点中找到的所有示例都只是指本地的、通常是同一类的服务器-客户端应用程序,其中客户端只是访问证书,因为它们属于同一类……但这并不现实案子。
感谢所有答案、提示和建议。谢谢。
private class ServerTask extends Thread {
public void run() {
try(ZContext context = new ZContext()){ //create context
ZAuth authenticator = new ZAuth(context); //create authenticator for incoming clients
authenticator.setVerbose(true); //get indication of what the authenticator is deciding
authenticator.allow("127.0.0.1"); //Whitelisting an adress, all other adresses will be rejected
//authenticator.configureCurve(CERTIFICATE_FOLDER); //Tell authenticator to use the certificate store in .curve
//ZCert server_cert = new ZCert(); //Create a server certificate
//writeServerCertToFile(server_cert); //write the cert so client can use it
//Create and bind server socket
ZMQ.Socket server = context.createSocket(SocketType.REP);
//server.setZAPDomain("global".getBytes());
//server.setCurveServer(true);
//server.setCurvePublicKey(server_cert.getPublicKey());
//server.setCurveSecretKey(server_cert.getSecretKey());
server.bind("tcp://*:9000");
//recieve and print message
String message = server.recvStr(0);
System.out.println("received message: " + message);
System.out.println("I should not be printed before the recieved message");
try {
System.out.println("destroys the auth and context");
authenticator.close();
context.destroy();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
解决方案
我在几个月前解决了这个问题,但如果将来可以帮助使用 ZeroMQ 的人,我最终使用了拉-推模式,将数据负载平衡到工作线程池。还使用 Inproc 进行前端/后端通信。这似乎是最合适的解决方案。
推荐阅读
- url - 如何在 Prestashop 的 TPL 格式中添加 hreflang
- c# - 使用 C# 读取/写入包含可变大小二维数组的结构体
- java - 平均计算器“从浮点数到整数的可能有损转换” - Java 赋值
- php - 自动完成搜索输入(无法加载 https://proj.test/autocomplete-search?term=tes: No 'Access-Control-Allow-Origin)
- javascript - 允许嵌套在相对位置 div 中的绝对位置 html div 具有可滚动的溢出-y 内容和可见的溢出-x 内容
- ruby-on-rails - RAILS Prism gem 仅在直接 URL 或刷新页面时突出显示代码示例
- javascript - React ES6 App - 本地 API 调用
- ios - 谷歌视觉图像标签 API 错误
- hubspot - 通过 Hubspot API 获取页面浏览量
- jquery - 图像闪烁,因为图像无法在 IE 和 Firefox 上加载