gpt4 book ai didi

java - ZeroMQ 运行服务器 Java

转载 作者:行者123 更新时间:2023-12-02 01:47:40 25 4
gpt4 key购买 nike

我目前正在尝试开发一个服务器,该服务器基本上应该随时从未知数量的客户端获取传入数据。即系统将有多个客户端来发送数据,服务器的工作基本上只是收集数据并将其保存到数据库中。

  1. 现在我希望服务器持续运行。现在服务器只接收一个客户端并关闭。如果我说围绕接收和打印消息部分执行 while(true)- 循环,它甚至不会执行一次。

  2. 据我所知,REP REQ 并不是最佳模式,那么哪种模式最适合让服务器获取传入数据?

  3. 使用 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 进行前端/后端通信。这似乎是最合适的解决方案。

关于java - ZeroMQ 运行服务器 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57446102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com