Note: for support questions, please use one of these channels: stackoverflow or slack
1) Start headless socket.io server with:
require('dotenv').config();
var Server = require('socket.io');
var io = new Server();
io.on('connection', function(client){
console.log("a new connection was received!");
client.on('request_payload', function (from, msg) {
console.log('I received a private message by ', from, ' saying ', msg);
});
client.on('disconnect', function(){
console.error("Client disconnected!");
})
});
console.log(`Started socket server on port ${process.env.SOCKET_SERVER_PORT}`);
io.listen(process.env.SOCKET_SERVER_PORT);
2) Attempt client side connection with socket.[email protected]
var socket = io(`ws://127.0.0.1:9090/`);
socket.on('connect', function(){
console.log('connected!');
});
socket.on('event', function(data){});
socket.on('disconnect', function(){
console.log('disconnected');
});
Note that I'm using webpack as my build system, and taking in socket.io-client through an import instead of it being served down in the /socket.io route like it usually should, though I doubt this should matter.
The server runs fine if there are no incoming connections. As soon as a client tries to connect I get the issue seen below.
Not crash
Node version: 7.5.0
> node socketapp/server.js
Started socket server on port 9090
a new connection was received!
C:\Users\Coop\Documents\Github\lora_demo_server\node_modules\ws\lib\Receiver.js:306
if (mask != null && buf != null) bufferUtil.unmask(buf, mask);
^
TypeError: Cannot read property 'unmask' of undefined
at Receiver.unmask (C:\Users\Coop\Documents\Github\lora_demo_server\node_modules\ws\lib\Receiver.js:306:46)
at Receiver.finish (C:\Users\Coop\Documents\Github\lora_demo_server\node_modules\ws\lib\Receiver.js:505:25)
at Receiver.expectHandler (C:\Users\Coop\Documents\Github\lora_demo_server\node_modules\ws\lib\Receiver.js:493:33)
at Receiver.add (C:\Users\Coop\Documents\Github\lora_demo_server\node_modules\ws\lib\Receiver.js:103:24)
at Socket.realHandler (C:\Users\Coop\Documents\Github\lora_demo_server\node_modules\ws\lib\WebSocket.js:825:20)
at emitOne (events.js:96:13)
at Socket.emit (events.js:189:7)
at readableAddChunk (_stream_readable.js:176:18)
at Socket.Readable.push (_stream_readable.js:134:10)
at TCP.onread (net.js:551:20)
It looks like this is an issue with the ws module. Installing the bufferutil and utf-8-validate modules, as per reccomendation on their npm page breaks the module. The issue seems to be that the api that they use for the mocks doesnt match the api for the most updated versions of these modules. Weird because they list the most updated version of these in their package.json.
Performing an npm remove bufferutil and npm remove utf-8-validate after installation of socket.io seemed to have resolved the issue.
There is a PR for this in engine.io as it seems: https://github.com/socketio/engine.io/pull/487
Installing the versions [email protected] requires worked for me:
[email protected]
[email protected]
You can use bufferutil@<2 and utf-8-validate@<3 with ws@1.
Removing them completely is something that also worked, though this should probably be documented in the README, as it was an annoying issue to resolve.
At least until ws is upgraded in engine.io
@sergei1152 is there anything else we can do here?
@darrachequesne we released [email protected] with support for all bufferutil and utf-8-validate versions.
@lpinca awesome, as usual. I guess we can close the issue then, thanks.
Most helpful comment
It looks like this is an issue with the
wsmodule. Installing thebufferutilandutf-8-validatemodules, as per reccomendation on their npm page breaks the module. The issue seems to be that the api that they use for the mocks doesnt match the api for the most updated versions of these modules. Weird because they list the most updated version of these in their package.json.Performing an
npm remove bufferutilandnpm remove utf-8-validateafter installation of socket.io seemed to have resolved the issue.