我正在开发一个使用Socket.IO从服务器连接到客户端的实时数据通信平台。服务器正在运行Node.JS,客户端是使用Atom Electron的网页形式的桌面应用程序。
我在客户端上收到的消息非常好,但当我尝试发送消息时,请通过以下格式:
socket.on('error',function(err) {
console.log('client error: '+JSON.stringify(err));
});
服务器触发错误处理程序:
client error: {}
我在日志中看到:
[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会在发送消息时显示日志:
[TypeError: Property 'undefined' of object #<Object> is not a function]
为什么会发生这种情况的任何线索?
修改
客户端和服务器都运行Socket.IO版本1.3.5。
此外,尝试使用console.log记录错误对象会导致控制台中的以下行:
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
});
});
我假设绑定到服务器上的错误事件的函数不是为了接受错误对象而设计的。
修改
服务器端,执行此代码以开始Socket.IO连接。
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});
}();
客户端,此代码运行:
server.R
编辑(再次):
可以成功发送和接收其他消息。
通过Web检查器网络面板检查原始网络数据显示: