我正在开发一个使用 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 检查器网络面板检查原始网络数据揭示了这一点: