私は、Socket.IO を使用してサーバーからクライアントに接続するリアルタイム データ通信プラットフォームに取り組んでいます。サーバーは Node.JS を実行しており、クライアントは Atom のElectronを使用した Web ページ形式のデスクトップ アプリケーションです。
クライアントでメッセージを完全に受信していますが、メッセージを送信しようとすると、次の形式で送信されます。
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 インスペクターのネットワーク パネルを使用して生のネットワーク データを調べると、次のことがわかります。