[R] socket server, textConnection and readLines
    Krishna Dagli 
    krishna.dagli at gmail.com
       
    Tue Dec 16 17:10:48 CET 2008
    
    
  
Hello;
This is bit long email but hope someone can guide me.
I have questions regarding socket, readLines and textConnection. I am
not sure if my code is efficient (due to textConnection) and how to
handle client disconnect and restart of the socket server in R.
I have a huge(3.5+G) text file on machine 'A', which I want to process
on machine 'B' using read.table (one line or a chunk at a time). On
machine B, I would like to use NWS and multiple R scripts to process
each line/chunk.
To do this I am running netcat (http://netcat.sourceforge.net/) on
macine 'A' and sending data to machine 'B's R socket server.
Here is the data that I have on machine 'A'
---data---
RELIANCE,1200.00,03-NOV-2008,09:00:02:286
RELIANCE,1200.20,03-NOV-2008,09:00:02:287
RELIANCE,1200.10,03-NOV-2008,09:00:02:289
RELIANCE,1201.10,03-NOV-2008,09:00:02:310
INFOSYSTCH,1400.00,03-NOV-2008,09:00:02:286
INFOSYSTCH,1400.20,03-NOV-2008,09:00:02:287
INFOSYSTCH,1400.10,03-NOV-2008,09:00:02:289
INFOSYSTCH,1401.10,03-NOV-2008,09:00:02:310
---end data---
Here is the code that I am using for reading this data on machine 'B'.
---code---
a.connection <- socketConnection(host = 'localhost', 1234,
                                 server = TRUE,
                                 blocking = TRUE,
                                 open = "r",
                                 encoding = getOption("encoding")
                                 )
while(1) {
  line.raw <- NULL;
  line.raw <- readLines( a.connection, n = 1, ok = TRUE);
  tConnection <- textConnection(line.raw);
  line.data <- read.table(tConnection);
  if ( (class(line.data) == 'try-error') ||
     (length(line.data) <= 0)) {
    print ("may be client is disconnected! ");
    break;
  }
  # validate line.data and store it using
  print (line.data);
  close(tConnection);
}
---end code---
Questions:
1) Is there a way to avoid creation and closing of textConnection in
   above code? How can I directly read a line over socket in R?
   If I do not explicitly close the connection I get an warning message
   saying  "closing unused connection 7 (line.raw)".
2) What is the best way to detect that client is disconnected?
3) In C, we can create a socket, bind it but do accept() in side a
   while loop using select() call but how do I do the same in R.
Thanks again for reading such a long email and thanks in advance for
your pointers.
Thanks and Regards
Krishna
    
    
More information about the R-help
mailing list