[#407882] Ruby extremely slow compared to PHP — Mick Jagger <lists@...>

Hello there, how are you? Hope you are fine. I am a PHP programmer

17 messages 2013/06/02

[#407908] TCPServer/Socket and Marshal problem — Panagiotis Atmatzidis <atma@...>

Hello,

18 messages 2013/06/03

[#407946] Is rubyquiz.com dead? — Alphonse 23 <lists@...>

Thread title says everything.

18 messages 2013/06/04

[#408012] Need help understanding recursion. — pedro oliva <lists@...>

Ive been reading Chris Pine's book 'Learn to Program' and its been going

11 messages 2013/06/06

[#408129] Getting Started With Development — Chamila Wijayarathna <cdwijayarathna@...>

I'm new to Ruby Development. I downloaded source from Github, but couldn't

24 messages 2013/06/11
[#408131] Re: Getting Started With Development — Per-erik Martin <lists@...> 2013/06/11

Ruby is often installed on linux, or can be easily installed with the

[#408146] Re: Getting Started With Development — "Chamila W." <lists@...> 2013/06/11

Per-erik Martin wrote in post #1112021:

[#408149] Re: Getting Started With Development — "Carlo E. Prelz" <fluido@...> 2013/06/11

Subject: Re: Getting Started With Development

[#408198] NokoGiri XML Parser — "Devender P." <lists@...>

Hi,

11 messages 2013/06/13

[#408201] trying to load a .rb file in irb — "Eric D." <lists@...>

I am trying to load a ruby program into irb and it will not load.

12 messages 2013/06/13

[#408205] Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...>

Hell Team,

18 messages 2013/06/13
[#408219] Re: Can I use Sinatra to render dynamic pages? — Nicholas Van Weerdenburg <vanweerd@...> 2013/06/14

You should be able to do this without JavaScript by using streaming.

[#408228] Re: Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...> 2013/06/14

Well, I got some good suggestions from everyone here. I thank you all for

[#408275] Compare and sort one array according to another. — masta Blasta <lists@...>

I have two arrays of objects that look something like this:

14 messages 2013/06/17

[#408276] Comparing objects — "Thom T." <lists@...>

How do I compare two objects in Ruby, considering only attributes

15 messages 2013/06/17

[#408307] getting the most out of Ruby — robin wood <lists@...>

I write a lot of scripts in Ruby, most are small simple things but some

13 messages 2013/06/18

[#408309] Creating ruby script exe — Rochit Sen <lists@...>

Hi All,

17 messages 2013/06/18

[#408357] Beginners problem with database and datamapper — cristian cristian <lists@...>

Hi all!

28 messages 2013/06/20

[#408437] How do I input a variable floating point number into Ruby Programs — "Michael P F." <lists@...>

I want to evaluate the following interactively:

10 messages 2013/06/23

[#408518] #!/usr/bin/env: No such file or directory — Todd Sterben <lists@...>

I am new to both linux and ruby. I am using Ubuntu and Ruby 1.9

17 messages 2013/06/27

[#408528] Designing a Cabinet class — Mike Vezzani <lists@...>

Hello all,

12 messages 2013/06/27

[#408561] Find elment in array of hashes — Rodrigo Lueneberg <lists@...>

array = {:id=>1, :price =>0.25} # index[0]

23 messages 2013/06/28

Re: TCPServer/Socket and Marshal problem

From: Panagiotis Atmatzidis <atma@...>
Date: 2013-06-03 21:21:17 UTC
List: ruby-talk #407937
Hello,

On 3 =CE=99=CE=BF=CF=85=CE=BD 2013, at 22:01 , Joel VanderWerf =
<joelvanderwerf@gmail.com> wrote:

> On 06/03/2013 12:41 PM, Panagiotis Atmatzidis wrote:
>>=20
>> On 3 =CE=99=CE=BF=CF=85=CE=BD 2013, at 21:24 , Joel VanderWerf =
<joelvanderwerf@gmail.com> wrote:
>>=20
>>> On 06/03/2013 11:47 AM, Panagiotis Atmatzidis wrote:
>>>> Hello,
>>>>=20
>>>> I'm writing a client/server application using TCPSocket and =
TCPServer. To serialize the objects at this point I use Marshal, since =
it comes handy.
>>> ...
>>>> What I notice is that connection ends when the '\n' character =
appears. I think that the issue is me using "@con.gets" method instead =
of something more appropriate. I tried @con.read but since 'read' method =
waits for the remote party to send an 'EOF' or close the connection =
stalls.
>>>>=20
>>>> Is there any other method I can use instead of gets? I did a =
'methods.sort' but I can't see and I don't know how to read about these =
methods using "ri". 'ri TCPSocket::getc' for example doesn't work.
>>>=20
>>> You can try
>>>=20
>>> Marshal.load(conn)
>>>=20
>>> on the client side. The Marshal#load method determines just how many =
bytes to read.
>>=20
>>=20
>> Worked fine! Thank you! I don't get it thought, could you elaborate a =
bit?
>=20
> Sure (sorry to be cryptic!).
>=20
> If you look at the format of marshalled objects, there is always a way =
to determine how many bytes to expect. In the case of fixed length data, =
there is a type field followed by the data (floats for example). In the =
case of strings, arrays, hashes, etc. there are type and length fields =
followed by the items (which themselves will have type and possibly =
length fields). So #load always knows either the number of bytes to read =
or the number of times to iterate to read all the items. Recursively =
build the object tree, and you're done.
>=20
> However, Marshal#load can't know, until this recursion finishes, the =
total number of bytes. There is no length field for the whole serialized =
blob. That's why load(sock.read(n)) doesn't work well with marshal.
>=20
> Btw, if your objects are just strings, numbers, booleans, hashes, and =
arrays, then msgpack is a great alternative to marshal. It's not ruby =
specific, it's fast and compact, and it plays well with non-blocking io.
>=20
> Why non-blocking io? You'll notice that if you Marshal.load(conn) and =
conn takes a long time to send all the bytes, then the thread that =
called #load is blocked. So, just start a thread per connection. That's =
fine if you only need a few connections at a time. With msgpack's =
buffering, it's possible to read only the complete objects from the =
connection, and then the thread is free to go on to another connection =
and read. (See msgpack doc for examples.) Btw, the yajl JSON lib does =
something like this too.
>=20
> Cheers!

Thanks for the amazing explanation!=20

I will try msgpack since my objects are just strings and arrays :-)


Panagiotis (atmosx) Atmatzidis

email:	atma@convalesco.org
URL:	http://www.convalesco.org
GnuPG ID: 0x1A7BFEC5
gpg --keyserver pgp.mit.edu --recv-keys 1A7BFEC5
--
The wise man said: "Never argue with an idiot. They bring you down to =
their level and beat you with experience."



In This Thread