WebSocket com socket.io retornando "debug - destroying non-socket.io upgrade"

353 views
Skip to first unread message

José Júnior

unread,
Mar 9, 2012, 8:30:48 AM3/9/12
to NodeJS Brasil
Bom dia pessoal,

sou totalmente novato em node.js, então resolvi fazer alguns testes.
Tenho exemplo web socket com socket.io, o html é servido a partir do
APACHE, com seguinte código:

-=-=-=-=-=-=- cliente -=-=-=-=-=-=-=

// Create a socket instance
socket = new WebSocket('ws://192.168.1.157:843');

// Open the socket
socket.onopen = function(event) {
console.log('Socket opened on client side',event);
// Listen for messages
socket.onmessage = function(event) {
console.log('Client received a message',event);
};

// Listen for socket closes
socket.onclose = function(event) {
console.log('Client notified socket has closed',event);
};
};


=-=-=-=-= server =-=-=-=-=-=-=

// Require HTTP module (to start server) and Socket.IO
var http = require('http'), io = require('socket.io');

var server = http.createServer(function(req, res){

// Send HTML headers and message
res.writeHead(200,{ 'Content-Type': 'text/html' });
res.end('<h1>Hello Socket Lover!</h1>');
});
server.listen(843);

// Create a Socket.IO instance, passing it our server
var socket = io.listen(server);

// Add a connect listener
socket.on('connection', function(client){

// Create periodical which ends a message to the client every 5
seconds
var interval = setInterval(function() {
client.send('This is a message from the server! ' + new
Date().getTime());
},5000);

// Success! Now listen to messages to be received
client.on('message',function(event){
console.log('Received message from client!',event);
});
client.on('disconnect',function(){
clearInterval(interval);
console.log('Server has disconnected');
});

});

quando executo o cliente aparece somente isto "debug - destroying non-
socket.io upgrade", alguém teria alguma ideia?

Valeu!

José Júnior

Deividy Metheler Zachetti

unread,
Mar 9, 2012, 9:30:20 AM3/9/12
to nod...@googlegroups.com
O problema não tá no cliente? 
Tipo, o diretório aonde você está incluindo o <script src="/socket.io/socket.io.js"></script> está correto?
--
Atenciosamente,
Deividy Metheler Zachetti.

Desenvolvimento de Soluções Inteligentes e Dinâmicas.
Websites, Lojas Virtuais, Sistemas Web e Intranet.
Simples, rápido e fácil.

+55 (19) 9280-4294 / 3406-5111 / 3466-5167

Diego Dias

unread,
Mar 9, 2012, 9:31:47 AM3/9/12
to nod...@googlegroups.com
O socket.io é servido pelo seu servidor, logo vc precisa apontar o socket.io no client para a mesma url onde o servidor esta ouvindo.
--

Diego Dias
Analista Desenvolvedor
Microsoft Certified Applications Developer
Microsoft Certified Technology Specialist WCF .Net 4.0 -
Charter Member
11-8931.1768


José Júnior

unread,
Mar 9, 2012, 10:44:34 AM3/9/12
to NodeJS Brasil
não estou usando soicket.oi no cliente, apenas no NODE.js, no cliente
estou usando websocket que é navito no chome, não é?

On 9 mar, 11:31, Diego Dias <diego.d...@gmail.com> wrote:
> O socket.io é servido pelo seu servidor, logo vc precisa apontar o
> socket.iono client para a mesma url onde o servidor esta ouvindo.
>
> On Fri, Mar 9, 2012 at 11:30 AM, Deividy Metheler Zachetti <
>
>
>
>
>
>
>
>
>
> deivi...@gmail.com> wrote:
> > O problema não tá no cliente?
> > Tipo, o diretório aonde você está incluindo o <script src="/
> > socket.io/socket.io.js"></script> está correto?
>
> > cont...@deividy.com / deivi...@gmail.com
>
> >www.deividy.com
>
> --
>
> *Diego Dias
> *Analista Desenvolvedor
> Microsoft Certified Applications Developer
> Microsoft Certified Technology Specialist WCF .Net 4.0 - Charter
> Member<http://www.microsoft.com/learning/en/us/certification/cert-program-me...>
> 11-8931.1768

José Júnior

unread,
Mar 9, 2012, 11:04:23 AM3/9/12
to NodeJS Brasil
a mensagem é lançada quando chamo esta linha no cliente "socket = new
WebSocket('ws://192.168.1.157:843');"

On 9 mar, 11:31, Diego Dias <diego.d...@gmail.com> wrote:
> O socket.io é servido pelo seu servidor, logo vc precisa apontar o
> socket.iono client para a mesma url onde o servidor esta ouvindo.
>
> On Fri, Mar 9, 2012 at 11:30 AM, Deividy Metheler Zachetti <
>
>
>
>
>
>
>
>
>
> deivi...@gmail.com> wrote:
> > O problema não tá no cliente?
> > Tipo, o diretório aonde você está incluindo o <script src="/
> > socket.io/socket.io.js"></script> está correto?
>
> > cont...@deividy.com / deivi...@gmail.com
>
> >www.deividy.com
>
> --
>
> *Diego Dias
> *Analista Desenvolvedor
> Microsoft Certified Applications Developer
> Microsoft Certified Technology Specialist WCF .Net 4.0 - Charter
> Member<http://www.microsoft.com/learning/en/us/certification/cert-program-me...>
> 11-8931.1768

diego nunes

unread,
Mar 9, 2012, 11:49:20 AM3/9/12
to nod...@googlegroups.com

José, é importante entender que o WebSocket é só uma forma de transporte de, enquanto o Socket.IO é uma lib que abstrai a conexão é estabelece um protocolo de comunicação próprio. Quando você conecta usando o WebSocket, o servidor Socket.IO que está rodando no outro lado espera certos pacotes de dados (handshake), o que o seu código não faz por isso o servidor Socket.IO diz que o cliente não é Socket.IO também é fecha a conexão. Você tem duas opções:
1) usar a lib de Socket.IO no cliente.
2) não usar Socket.IO no server, mas sim implementar seu próprio protocolo de comunicação sobre um socket padrão "cru", por assim dizer.

José S O Júnior

unread,
Mar 9, 2012, 11:53:57 AM3/9/12
to nod...@googlegroups.com
presumo que usar socket.io seja a forma mas apropriada, então vou fazer alguns testes e retorno.

Obigado a todos!
--
José Júnior

José S O Júnior

unread,
Mar 9, 2012, 12:02:15 PM3/9/12
to nod...@googlegroups.com
agora tenho seguite código no cliente

<script src="http://cdn.socket.io/stable/socket.io.js"></script>

// Create SocketIO instance
        var socket = new io.Socket('192.168.1.157',{
            port: 843
        });
        socket.connect();
       
        // Add a connect listener
        socket.on('connect',function() {
            log('<span style="color:green;">Client has connected to the server!</span>');

        });
        // Add a connect listener
        socket.on('message',function(data) {
            log('Received a message from the server:  ' + data);
        });
        // Add a disconnect listener
        socket.on('disconnect',function() {
            log('<span style="color:red;">The client has disconnected!</span>');
        });
       
        // Sends a message to the server via sockets
        function sendMessageToServer(message) {
            socket.send(message);
            log('<span style="color:#888">Sending "' + message + '" to the server!</span>');
        }
       
        // Outputs to console and list
        function log(message) {
            var li = document.createElement('li');
            li.innerHTML = message;
            document.getElementById('message-list').appendChild(li);
        }


O código do server continua o mesmo.
No console do browser gera isso
XMLHttpRequest cannot load http://192.168.1.157:843/socket.io/xhr-polling//1331312259405. Origin http://localhost is not allowed by Access-Control-Allow-Origin.

E no server gerra isso
warn  - unknown transport: "undefined"
info  - unhandled socket.io url


mais uma vez, Obrigado.
--
José Júnior

Emerson Macedo

unread,
Mar 14, 2012, 8:48:31 AM3/14/12
to nod...@googlegroups.com
Você está com problema de cross-domain. Onde está seu html que está com esse código cliente? 

2012/3/9 José S O Júnior <juniorol...@gmail.com>



--
Emerson Macedo
http://codificando.com

José S O Júnior

unread,
Mar 14, 2012, 8:58:15 AM3/14/12
to nod...@googlegroups.com
Então Emerson,

o código está em um Apache.

encontrei alguns post falando que o código desta CDN está bugado, procede?
--
José Júnior

Emerson Macedo

unread,
Mar 14, 2012, 9:07:09 AM3/14/12
to nod...@googlegroups.com
Pode até ser. O que eu quis dizer sobre onde está o código é em qual host, pois você está acessando 192.168.1.157 e dependendo do host você não consegue usar flashsocket ou xhr-pooling como transporte, teria que usar jsonp-pooling.

Sobre o código da CDN estar bugado, sim é possível. De qualquer forma, quando você sobe um socket.io server ele já server o js correto para aquela versão no /socket.io/socket.io.js. Isso é importante pois se você pega outra versão, pode ser que não seja compatível com o server que você está rodando e ter problemas. No teu caso eu não acredito que seja isso. 

De qualquer forma, tenta primeiro fazer o helloworld do github (https://github.com/learnboost/socket.io) pra ver se funciona numa boa ai na tua máquina pra garantir que teu environment está legal.

[]s

2012/3/14 José S O Júnior <juniorol...@gmail.com>

José S O Júnior

unread,
Mar 14, 2012, 9:32:59 AM3/14/12
to nod...@googlegroups.com
o helloworld funciona bem, o que eu queria fazer era usar qualquer client socket com server socket.oi, mas como vc explicou em outro post, que isto não seria possível.

Valeu Emerson!
--
José Júnior

Emerson Macedo

unread,
Mar 14, 2012, 9:37:39 AM3/14/12
to nod...@googlegroups.com
Até é possível, mas não trivial como o exemplo do site. Sugiro você dar uma pesquisada sobre cross-domain, jsonp e até dar uma lida sobre essa parte do socket.io.

José S O Júnior

unread,
Mar 14, 2012, 9:42:41 AM3/14/12
to nod...@googlegroups.com
Valeu pelas dicas Emerson, vou pesquisar, valeu mesmo!

Abraço
--
José Júnior

Reply all
Reply to author
Forward
0 new messages