Node.js: Conectando a um servidor usando soquetes

Estou começando a jogar com o Node.js hoje e pensei em começar com o que eu pensava que seria um script simples: conectar-se a um servidor por soquetes, enviar um pouco de dados e recebê-lo de volta. Estou criando um utilitário de linha de comando. Nada no navegador.

Um exemplo de servidor seria memcached, beanstalkd, etc. Parece que o módulo net é a ferramenta certa para o trabalho, mas ainda estou um pouco confuso na maneira de fazer o Node.js. Alguma ajuda seria apreciada.

Atualização # 1

Deixe-me ver se consigo dividir isso em algumas perguntas menores. Eu odeio até fazer perguntas como essa, mas a documentação do Node.js. é muito escassa e a maioria da documentação escrita há 6 meses já está desatualizada.

1) Para que eu possa usar o net.stream.write () para enviar dados ao servidor remoto, mas não sei como obter uma resposta. Eu nem tenho certeza de como testar quando write () é concluído, porque não é necessário um retorno de chamada.

2) Algumas dicas sobre como o evento inteiro funciona. Eu acho que essa é realmente a pedra fundamental que estou perdendo naquelas coisas.

Atualização # 2

Aqui é onde eu ainda estou confuso sobre a implementação de um programa cliente. Deixe-me esquematizar uma solicitação de envio típica => obter sistema de resposta:

1) Vinculo retornos de chamada ao módulo net para obter respostas e outros eventos, incluindo as ligações necessárias para obter uma resposta do servidor.

2) Uso stream.write () para enviar uma solicitação ao servidor.

3) Não faço nada, porque meu evento "data" vinculado receberá a resposta do servidor.

Aqui é onde as coisas ficam complicadas. Suponha que eu chame stream.write ()duas vezes antes que meu evento "data" acoplado seja chamado. Agora eu tenho um problema. Quando o evento "data" acontece, como sei para qual dos 2 pedidos é uma resposta? Estou garantido que as respostas ocorrerão na mesma ordem que as solicitações? E se as respostas voltarem em uma ordem diferente?

questionAnswers(1)

yourAnswerToTheQuestion