[R-pkg-devel] socketConnection, delay when reading from

Ben Engbers Ben@Engber@ @end|ng |rom Be-Log|c@|@n|
Sat Nov 27 10:09:14 CET 2021


Hi,

I have been working on a R-client for the BaseX XML-database and version 
0.9.2 is nearly finished (submitting version 0.9.0 was rejected by CRAN).
Version 0.3 of RBaseX can be found here 
(https://cran.microsoft.com/web/packages/RBaseX/index.html).

The client-server protocol specifies that the communication between the 
client and the database is based on a socket. The code (below) shows how 
I create that socket.

Writing to the socket works perfect. Reading from the sockets (see 
second codeblock) also produces correct results. The problem however is 
that the timeout, as specified when initializing the socket, causes a 1 
second delay for every read-operation.
I have experimented a lot with different settings and have been 
searching a lot on internet, but I can't find any method to get rid of 
that delay. (In C or C++ that should be easier but I have never before 
had any need to use those languages).
The very first version of my client used a block-size of 1 when reading. 
That gave acceptable response times for small query-results but reading 
large responses from the database took very long time.

Do you have any suggestions on how to cope with this problem?

Ben Engbers

-----------------------------
     CreateSocket = function(host, port = 1984L, username, password) {
       tryCatch(
         {conn <- private$conn <- socketConnection(
           host = "localhost", port,
           open = "w+b", server = FALSE, blocking = TRUE, encoding = 
"UTF-8", timeout = 1)
         }, error = function(e) {
           stop("Cannot open the connection")
         }
       )

-----------------------------

readBin_ <- function(conn) {
   chars_read <- raw(0)
   rd <- readBin(conn, what = "raw", 1024)
   while(length(rd) == 1024) {
     chars_read <- c(chars_read, rd)
     rd <- readBin(conn, "raw", 1024)
     }
   if (length(rd) > 0) chars_read <- c(chars_read, rd)
   return(chars_read)
}



More information about the R-package-devel mailing list