3

我正在开发一个使用 Socket.IO 从服务器连接到客户端的实时数据通信平台。服务器运行 Node.JS,客户端是使用 Atom 的Electron的网页形式的桌面应用程序。

我在客户端上接收消息非常好,但是当我尝试通过以下格式发送消息时:

window.socket.emit('embed',{'...'});

服务器触发错误处理程序:

socket.on('error',function(err) {
    console.log('client error: '+JSON.stringify(err));
});

我在我的日志中看到:

client error: {}

在发送消息时,在客户端调试 Socket.IO 会在日志中显示这一点:

[14184:0511/184052:INFO:CONSOLE(1)] "socket.io-client:manager writing packet %j +10s", source: https://cdn.socket.io/socket.io-1.3.5.js (1)
[14184:0511/184052:INFO:CONSOLE(1)] "socket.io-parser encoding packet %j +819ms", source: https://cdn.socket.io/socket.io-1.3.5.js (1)
[14184:0511/184052:INFO:CONSOLE(1)] "socket.io-parser encoded %j as %s +0ms", source: https://cdn.socket.io/socket.io-1.3.5.js (1)
[14184:0511/184052:INFO:CONSOLE(2)] "%cengine.io-client:socket %cflushing %d packets in socket%c +820ms", source: https://cdn.socket.io/socket.io-1.3.5.js (2)

为什么会发生这种情况的任何线索?

编辑:

客户端和服务器都运行 Socket.IO 版本 1.3.5。

此外,尝试使用 console.log 记录错误对象会导致控制台中出现以下行:

[TypeError: Property 'undefined' of object #<Object> is not a function]

我假设绑定到服务器上错误事件的函数并非旨在接受错误对象。

编辑:

服务器端,执行此代码以开始 Socket.IO 连接。

var io = require('socket.io')(1415);

io.on('connection',function(socket) {
    console.log('connection');

    socket.on('error',function(err) {
        console.log('client error: '+JSON.stringify(err));
        console.log(err);
    });

    socket.on('embed',function(obj) {
        var type = obj.type;
        var id = obj.id;
        console.log('--------------------------------------------');
        // ...
        // Additional Application Logic
    });
});

客户端,运行此代码:

window.socket = io('http://localhost:1415');

// When the message is emitted, this code is run. This code is run on a delay, and after messages have been received, so assume a connection is already established
function(id) {
    var type = getType(id);
    window.socket.emit('embed',{id:id,type:type});
}();

编辑(再次):

其他消息可以成功发送和接收。

通过 web 检查器网络面板检查原始网络数据揭示了这一点:

错误

4

0 回答 0