Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

can I use socket.io-client to connect to a standard websocket?

Trying to use socket.io-client to connect to a websocket server that is written in Go. I've successfully connected using the node WebSocket library (npm). So the working Websocket code looks like:

  goSocketPort = 6060   url = "ws://localhost:#{goSocketPort}/streamresults/"   ws = new WebSocket(url)    ws.on('open', ->     log "socket opened"   )    ws.on('message', (message) ->       console.log('received: %s', message)     #log "Socket message: #{JSON.stringify message}"   ) 

Pretty easy and it works -- the socket on the other end sends messages on a set frequency. But I initially tried with socket.io-client (npm) and just couldn't get it to go. It certainly lists websocket as its first-preference transport, but damn if I can get it to connect:

socket = ioClient.connect("#{url}", {port: goSocketPort, transports: ['xhr-polling', 'websocket']})   socket.on("connect", (r) ->   log "connected to #{url}" ) 

The connection never happens, so none of the on events are fired and the code exits right away. I've tried: leaving the port off the url and adding it in the options, leaving off the transports option (which means "all" according to the docs) and using an http url. Is socket-io.client not capable of connecting to a "standard" websocket?

like image 469
jcollum Avatar asked Mar 06 '14 17:03

jcollum


People also ask

Is Socket.IO same as WebSocket?

Key Differences between WebSocket and socket.io It provides the Connection over TCP, while Socket.io is a library to abstract the WebSocket connections. WebSocket doesn't have fallback options, while Socket.io supports fallback. WebSocket is the technology, while Socket.io is a library for WebSockets.

What is the difference between Socket.IO and Socket.IO client?

socket-io. client is the code for the client-side implementation of socket.io. That code may be used either by a browser client or by a server process that is initiating a socket.io connection to some other server (thus playing the client-side role in a socket.io connection).

Can a Socket connect to a WebSocket?

WebSocket is a special protocol that uses HTTP for handshake and use the underlaying socket to do the real communication afterwards. So, you cannot connect to a regular tcp socket with websocket because they are two different things.

What makes Socket.IO different from a standard web server?

WebSockets are also a browser implementation allowing bi-directional communication, however, Socket.IO does not use this as standard. First, Socket.IO creates a long-polling connection using xhr-polling. Then, once this is established, it upgrades to the best connection method available.


1 Answers

Based on our chat, it looks like you were misled by this quote:

The socket.io client is basically a simple HTTP Socket interface implementation. It looks similar to WebSocket while providing additional features and leveraging other transports when WebSocket is not supported by the user's browser.

What this means is that it looks similar to WebSocket from the perspective of client/server code that interacts with the Socket.io client/server. However, the network traffic looks very different from a simple WebSocket - there's an initial handshake in addition to a more robust protocol built on top of WebSocket once that's connected. The handshake is described here and the message protocol here (both are links to the Socket.IO protocol spec).

If you're writing a WebSocket server, you're better off just using the bare WebSocket interface rather than the Socket.io client, unless you intend to implement all of the Socket.io protocol.

like image 133
Aaron Dufour Avatar answered Sep 21 '22 03:09

Aaron Dufour