예제 #1
0
def publish_cfg_msg(trie, node_id, addr=None):
    """
    Publish node cfg message (to root node) with network ID to join.
    Node data is already populated in the ID trie.
    :param trie: `id_trie` state trie
    :param node_id: ID of mbr node to configure
    :param addr: IP address of subscriber
    """
    import time
    from nanoservice import Publisher
    from node_tools.msg_queues import make_cfg_msg

    if NODE_SETTINGS['use_localhost'] or not addr:
        addr = '127.0.0.1'

    pub = Publisher('tcp://{}:9442'.format(addr))

    # Need to wait a bit on connect to prevent lost messages
    time.sleep(0.002)

    msg = make_cfg_msg(trie, node_id)

    pub.publish('cfg_msgs', msg)
    logger.debug('CFG: sent cfg msg {} for node {} to {}'.format(
        msg, node_id, addr))
예제 #2
0
def drain_msg_queue(reg_q,
                    pub_q=None,
                    tmp_q=None,
                    addr=None,
                    method='handle_node'):
    """
    This function now handles several different methods; note the optional
    queue params should not be used together.
    :param reg_q: queue of registered nodes
    :param pub_q: queue of published nodes (use for publishing online nodes)
    :param tmp_q: queue of nodes/addrs for logging (use for publishing offline nodes)
    """
    import time
    from nanoservice import Publisher
    from node_tools.msg_queues import add_one_only

    if NODE_SETTINGS['use_localhost'] or not addr:
        addr = '127.0.0.1'

    pub = Publisher('tcp://{}:9442'.format(addr))
    id_list = list(reg_q)

    # Need to wait a bit on connect to prevent lost messages
    time.sleep(0.002)

    for _ in id_list:
        with reg_q.transact():
            node_id = reg_q.popleft()
        pub.publish(method, node_id)
        if pub_q is not None:
            with pub_q.transact():
                add_one_only(node_id, pub_q)
        logger.debug('Published msg {} to {}'.format(node_id, addr))
예제 #3
0
def run(N, addr):

    # Fork service
    service_process = Process(target=start_service, args=(addr, N))
    service_process.start()

    time.sleep(0.5)  # Wait for service connect
    # Create client and make reqs
    c = Publisher(addr)
    bench(c, N)
    c.socket.close()

    time.sleep(1)
    service_process.terminate()
예제 #4
0
def send_pub_msg(addr, method, data):
    """
    """
    import time
    from nanoservice import Publisher

    if NODE_SETTINGS['use_localhost'] or not addr:
        addr = '127.0.0.1'

    pub = Publisher('tcp://{}:9442'.format(addr))

    # Need to wait a bit on connect to prevent lost messages
    time.sleep(0.002)

    pub.publish(method, data)
    logger.debug('PUB: sent {} msg with paylod {} to {}'.format(
        method, data, addr))
예제 #5
0
 def setUp(self):
     self.addr = 'inproc://test'
     self.client = Publisher(self.addr)
     self.service = Subscriber(self.addr)
     self.service.subscribe('upper', lambda line: line.upper())
     self.service.subscribe('lower', lambda line: line.lower())
예제 #6
0
from nanoservice import Publisher
import time

p = Publisher('ipc:///tmp/pubsub-service.sock')

# Need to wait a bit to prevent lost messages
time.sleep(0.001)

p.publish('log_line', 'hello world')
p.publish('cap_line', 'this is uppercase')
예제 #7
0
import time
from nanoservice import Publisher

name = 'pub2'
p = Publisher('ipc:///tmp/pub2.sock', bind=True)

while True:
    time.sleep(1)
    p.publish('log', 'Hello from {} at: {}'.format(name, time.time()))
예제 #8
0
import time

from nanoservice import Publisher


addr = '127.0.0.1'
# addr = 'whatever'

pub_id = Publisher('tcp://{}:9442'.format(addr))
id_list = ['deadbeef00', 'deadbeef04', 'deadbeef03', 'deadbeef02', 'deadbeef01']

# Need to wait a bit to prevent lost messages
time.sleep(0.001)


for node_id in id_list:
    pub_id.publish('handle_node', node_id)
    print('Published msg {}'.format(node_id))