Poll Functions

0th

Percentile

Poll Functions

Poll functions

Keywords
programming
Usage
zmq.poll(socket, type, timeout = -1L, MC = .pbd_env$ZMQ.MC)

zmq.poll.free()

zmq.poll.length()

zmq.poll.get.revents(index = 1L)

Arguments
socket

a vector of ZMQ sockets

type

a vector of socket types corresponding to socket argument

timeout

timeout for poll, see ZeroMQ manual for details

MC

a message control, see ZMQ.MC() for details

index

an index of ZMQ poll items to obtain revents

Details

zmq.poll() initials ZMQ poll items given ZMQ socket's and ZMQ poll type's. Both socket and type are in vectors of the same length, while socket contains socket pointers and type contains types of poll. See ZMQ.PO() for the possible values of type. ZMQ defines several poll types and utilize them to poll multiple sockets.

zmq.poll.free() frees ZMQ poll structure memory internally.

zmq.poll.length() obtains total numbers of ZMQ poll items.

zmq.poll.get.revents() obtains revent types from ZMQ poll item by the input index.

Value

zmq.poll() returns a ZMQ code and an errno, see ZeroMQ manual for details, no error/warning/interrupt in this R function, but some error/warning/interrupt may catch by the C function zmq_poll().

zmq.poll.length() returns the total number of poll items

zmq.poll.get.revents() returns the revent type

References

ZeroMQ/4.1.0 API Reference: http://api.zeromq.org/4-1:_start

Programming with Big Data in R Website: http://r-pbd.org/

See Also

zmq.recv(), zmq.send().

Aliases
  • Poll Functions
  • zmq.poll
  • zmq.poll.free
  • zmq.poll.length
  • zmq.poll.get.revents
Examples
# NOT RUN {
### Using poll pattern.
### See demo/mspoller.r for details.

### Run next in background or the other window.
SHELL> Rscript wuserver.r &
SHELL> Rscript taskvent.r &
SHELL> Rscript mspoller.r

### The mspoller.r has next.
library(pbdZMQ, quietly = TRUE)

### Initial.
context <- zmq.ctx.new()
receiver <- zmq.socket(context, .pbd_env$ZMQ.ST$PULL)
zmq.connect(receiver, "tcp://localhost:5557")
subscriber <- zmq.socket(context, .pbd_env$ZMQ.ST$SUB)
zmq.connect(subscriber, "tcp://localhost:5556")
zmq.setsockopt(subscriber, .pbd_env$ZMQ.SO$SUBSCRIBE, "20993")

### Process messages from both sockets.
cat("Press Ctrl+C or Esc to stop mspoller.\n")
i.rec <- 0
i.sub <- 0
while(TRUE){
  ### Set poller.
  zmq.poll(c(receiver, subscriber),
           c(.pbd_env$ZMQ.PO$POLLIN, .pbd_env$ZMQ.PO$POLLIN))

  ### Check receiver.
  if(bitwAnd(zmq.poll.get.revents(1), .pbd_env$ZMQ.PO$POLLIN)){
    ret <- zmq.recv(receiver)
    if(ret$len != -1){
      cat("task ventilator:", ret$buf, "at", i.rec, "\n")
      i.rec <- i.rec + 1
    }
  }

  ### Check subscriber.
  if(bitwAnd(zmq.poll.get.revents(2), .pbd_env$ZMQ.PO$POLLIN)){
    ret <- zmq.recv(subscriber)
    if(ret$len != -1){
      cat("weather update:", ret$buf, "at", i.sub, "\n")
      i.sub <- i.sub + 1
    }
  }

  if(i.rec >= 5 & i.sub >= 5){
    break
  }

  Sys.sleep(runif(1, 0.5, 1))
}

### Finish.
zmq.poll.free()
zmq.close(receiver)
zmq.close(subscriber)
zmq.ctx.destroy(context)
# }
# NOT RUN {
# }
Documentation reproduced from package pbdZMQ, version 0.3-3, License: GPL-3

Community examples

Looks like there are no examples yet.