2016-07-22 5 views
0

外部VOLTTRONインスタンスに接続しています。私は接続からの応答を取得していません。問題は何ですか?VOLTTRON内でどのように接続の問題をデバッグできますか?

私は外部プラットフォームに接続してピアを取得するための単純なpythonスクリプトを作成しています。 serverkey、c​​lientkey、および/またはpublickeyが間違っている場合は、クライアント側からどちらが原因かを判断する方法がわかりません。私はちょうどgeventタイムアウトを取得します。知る方法はありますか?

import os 

import gevent 
from volttron.platform.vip.agent import Agent 

secret = "secret" 
public = "public" 
serverkey = "server" 
tcp_address = "tcp://external:22916" 

agent = Agent(address=tcp_address, serverkey=serverkey, secretkey=secret, 
       publickey=public) 
event = gevent.event.Event() 
greenlet = gevent.spawn(agent.core.run, event) 
event.wait(timeout=30) 
print("My id: {}".format(agent.core.identity)) 
peers = agent.vip.peerlist().get(timeout=5) 
for p in peers: 
    print(p) 
gevent.sleep(3) 
greenlet.kill() 
+0

我々はいくつかを必要としますコードと結果! –

答えて

2

短い答え:いいえ、クライアントはサーバーへの接続が失敗した理由を判断できません。クライアントはタイムアウトするまで接続を試みます。

サーバー側のログとデバッグメッセージは、接続の問題のトラブルシューティングに役立ちます。

  1. CURVE I: cannot open client HELLO -- wrong server key?
    クライアントは、クライアントが間違ったサーバキーを使用、またはサーバーが秘密鍵を省略し、サーバキーを省略次のいずれかのキーのエラーに関連する三つの異なるメッセージがあります。

  2. CURVE I: cannot open client INITIATE vouch
    クライアントは、公開または秘密鍵を省略し、またはその公開鍵と秘密鍵が一致しないのどちらか。

  3. authentication failure
    サーバキーは正しかったと秘密鍵と公開鍵は有効ですが、クライアントが(クライアントの公開鍵に基づいて)の接続が許可されていなかったため、サーバーは接続を拒否しました。

最初の2つのメッセージはlibzmqで表示されます。 3番目のメッセージvolttronを表示するには、冗長性を高める必要があります(少なくとも-v)。ここで


は、あなたがこれらのシナリオのいくつかをテストするために使用できる簡単なZMQサーバ・クライアントの例です:

サーバー:

import zmq 

context = zmq.Context() 
socket = context.socket(zmq.REP) 
socket.curve_server = 1 
socket.curve_secretkey = "mW4i2O{kmcOXs9q>UP0(no4-Sp1r(p>vK?*NFwV$" 
# The corresponding public key is "krEC0>hsx+o4Jxg2yvitCOVwr2GF85akNIsUdiH5" 
socket.bind("ipc://test123") 

while True: 
    msg = socket.recv() 
    new_msg = "I got the message: {}".format(msg) 
    print(new_msg) 
    socket.send(new_msg) 

クライアント:

import zmq 

pub, sec = zmq.curve_keypair() 
context = zmq.Context() 
socket = context.socket(zmq.REQ) 
socket.curve_secretkey = sec 
socket.curve_publickey = pub 
socket.curve_serverkey = "krEC0>hsx+o4Jxg2yvitCOVwr2GF85akNIsUdiH5" 
socket.connect("ipc://test123") 

socket.send(b'Hello') 
msg = socket.recv() 
print("From the server: {}".format(msg)) 
+0

https://github.com/zeromq/pyzmq/blob/master/zmq/error.pyのどのエラーでCURVE I:クライアントのINITIATE vouchがカーブが非常に特殊なので、もしあればvouch fallを開くことができないと思いますか? – Craig

+0

@Craig: "CURVE I:クライアントINITIATE vouchを開けません"というエラーは、pyzmqで例外を生成しません。私は答えの中にサンプルコードを追加しました。あなたが望むなら、いくつかのシナリオをテストすることができます(例えば、クライアントの公開鍵または秘密鍵をコメントアウトする)。 – Zach

+0

しかし、本当に必要なのは、単にサーバー上の標準エラーに印刷するのではなく、クライアントに返すというメッセージです。 – Craig

関連する問題