1

PUSH/PULL スキーマの nanomsg python でタイムアウトを適切に設定するのに問題があります。set socket option 関数を使用し、ctype オブジェクトを渡します。どちらの set_sock_options も成功を返します。何か不足していますか?

ソケットは送受信に機能しますが、タイムアウトは無限です。get_sock_option を使用すると、設定した値が返されるため、入力に何らかの効果があるようです。

NN_RCVTIMEO = 5
NN_SNDTIMEO = 4
NN_SOL_SOCKET = 0

message = ""

timeout = ctypes.create_string_buffer(b'500');

#Bind input socket
socket_in = nn_wrapper.nn_socket(AF_SP, PULL)
sucess = nn_wrapper.nn_setsockopt(socket_in, NN_SOL_SOCKET, NN_RCVTIMEO, timeout)
nn_wrapper.nn_bind(socket_in, 'tcp://127.0.0.1:64411')
time.sleep(0.2)

print("SUCESS?" + str(sucess))


#Send inquiry
socket_out = nn_wrapper.nn_socket(AF_SP, PUSH)
sucess = nn_wrapper.nn_setsockopt(socket_out, NN_SOL_SOCKET, NN_SNDTIMEO, timeout)
nn_wrapper.nn_connect(socket_out, 'tcp://127.0.0.1:64400')
time.sleep(0.2)

print("SUCESS?" + str(sucess))

nn_wrapper.nn_send(socket_out, b'HELLO',0)

#Received...
bytes, message = nn_wrapper.nn_recv(socket_in, 0)

nn_wrapper.nn_close(socket_in)
nn_wrapper.nn_close(socket_out)
4

2 に答える 2

1

パーティーに遅れて、うまくいけば次の男を助けるでしょう...

ライブラリの作成者はすでにこれらの問題を考えておりset_int_option、ソケット オブジェクトに Python を提供しました。

これは私のために働いた:

import nanomsg


class ManagementClient:
    def __init__(self, endpoint):
        self._client_socket = nanomsg.Socket(nanomsg.REQ)
        self._client_socket.set_int_option(nanomsg.SOL_SOCKET, nanomsg.RCVTIMEO, 5 * 1000)
        self._client_socket.connect("tcp://" + endpoint)

于 2019-05-25T11:26:38.317 に答える