i am struggling to understand something.
in eventmachine i have “receive_data” method with a “data” variable and
the send_data(data) method.
i have implemented the server logic as :
def post_init
cleanup_all_data
end
def receive_data(data) #data parsing code
send_data(response)
cleanup_all_data
end
but do i really need to cleanup data? if it’s a tcp socket and non
persistent connection then it’s a dedicated connection and when it’s
closed all the data is dead? or it’s an endless loop i need to cleanup
the data for the next connection?
persistent connection then it’s a dedicated connection and when it’s closed
all the data is dead? or it’s an endless loop i need to cleanup the data
for the next connection?
post_init is used to initialize variables after instantiating the
server,
so all the instance variables will not point to nil.
Secondly, in the EventMachine rdoc describing receive_data, EventMachine knows absolutely nothing about the protocol which your code
implements.
What it means is that you must define how receive_data will separate the
data stream because it otherwise will not know where the stream ends.
Notice that the code is using pos =~ /\r\n\r\n/ followed by @icap_header[:data] = @data[0…pos+1] to cap the stream and then calling
cleanup to start over for a new stream.
This all happens on the same connection. A new connection would use a
new
server instance with its own instance variables.
You could try instead using the BufferedTokenizer class, which will
split
the received data into an array of tokenized entities using a delimiter
(the default is “\n”, but in this case you would use “\r\n\r\n”). You
can
then iterate through the array using the each method, passing your code
as
a block.