私はこのシナリオを持っています: サーバーに送信しようとするクライアントですが、サーバーはオフラインです。socket.send(リクエスト、0); Javaタイマースレッド内:
これはスレッドです run() ZMQ.Socket m_socket はスレッド外で開始されます
public void run() {
m_socket.send(request, 0);
byte[] reply = m_socket.recv(0);
//get seperator
byte[] empty1 = m_socket.recv(0);
//get secound frame
byte[] byteFileStruct = m_socket.recv(0);
if(null!=reply) // this is indication that the server is offline , is there better way to check ?
{
......
}
}
ここで、Timer は run() メソッドを再びトリガーし、m_socket.send(request, 0); を実行すると、2番目のラウンドで取得:
Exception in thread "Timer-0" org.zeromq.ZMQException: Operation cannot be accomplished in current state(0x9523dfb)
at org.zeromq.ZMQ$Socket.send(Native Method)
at com.agent.core.Poller$PollarWorker.run(Poller.java:155)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
ラウンドごとに新しいソケットを作成する必要がありますか? それはこれです:
m_context = ZMQ.context(1);
m_socket = m_context.socket(ZMQ.REQ);
m_socket.setReceiveTimeOut(2000);
m_socket.setSendTimeOut(2000);
m_socket.connect (sControllerDomain);