NOTA: supongo que por cliente se refiere al navegador. De lo contrario, aclare con más detalles.
Socket.io no es compatible con datos binarios, principalmente porque ofrece diferentes transportes, y muchos de ellos no son compatibles.
Sin embargo, las websockets nativas SON compatibles con Blobs y ArrayBuffers.
Si realmente quiere ir con datos binarios para la eficiencia (que, estoy de acuerdo, es el camino a seguir en su caso), creo que debería considerar el uso de websockets en lugar de socket.io.
Lo malo:
- Sólo ~ 55% de los usuarios navegar por la web con un navegador que soporte websockets.
- No tendría las ofertas de socket.io de productos, tales como canales, emiten y en métodos.
Lo bueno:
Web API de sockets es extremadamente simple.
Será mucho más eficiente con la memoria. Normalmente, las matrices normales se transfieren haciendo primero una cadena JSON y luego enviándolas. Esto significa que en realidad estás enviando una representación de cadena de tu matriz. En cambio, aquí enviará la cantidad de bytes que esperaría (de una manera más predecible, sin verificar las longitudes de cadena antes de enviar, pero de una manera más "protocolizada" si se desea).
Si decide utilizar WS, se puede comprobar esto: http://www.adobe.com/devnet/html5/articles/real-time-data-exchange-in-html5-with-websockets.html
Cosa que usted puede ir sólo con JSON.
A decir verdad, si sigues con JSON para socket.io y soporte "universal", habilita también el transporte flash y desactiva los transportes más lentos si el juego requiere poca latencia.
Esto dependería de qué biblioteca de serialización/protocolo RPC esté utilizando para enviar los datos a través de la red. – millimoose