geddy与socket.io错误

时间:2013-11-14 11:45:25

标签: node.js socket.io geddy

我正在使用geddy框架(基本聊天示例)进行实时应用。但是当客户端尝试建立连接时,我得到并出错。

这是服务器端代码(在init.js文件中):

var io = require('socket.io').listen(geddy.server);
io.sockets.on('connection', function (socket) {
  console.log("Good!");
  socket.emit('new', { message: 'world' });
  socket.on('newMessage', function (data) {
    console.log(data);
  });
});

和客户端代码:

$(document).ready(function(){
    startSockets();
});

function startSockets(){
  var socket = io.connect('http://localhost:4004');
  socket.on('new', function (data) {
    alert(data);
    //socket.emit('newMessage', { my: 'data' });
  });
}

当我尝试连接到localhost时:4004 /我收到下一个警告:

   debug - setting request GET /socket.io/1/websocket/G_GapksVv1J4iBZIUVe3
   debug - set heartbeat interval for client G_GapksVv1J4iBZIUVe3
   debug - websocket writing 7:::1+0
   warn  - client not handshaken client should reconnect
   info  - transport end (error)
   debug - set close timeout for client G_GapksVv1J4iBZIUVe3
   debug - cleared close timeout for client G_GapksVv1J4iBZIUVe3
   debug - cleared heartbeat interval for client G_GapksVv1J4iBZIUVe3
   debug - discarding transport

除Chrome控制台外,还会出现此错误:

WebSocket is closed before the connection is established. 

我不知道是什么原因引起的。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

问题是Socket.io需要在启动后连接到服务器,并且服务器在init.js中的代码运行之后才会启动。现有内置RT代码(从Geddy v0.11开始)中的当前(hacky)解决方案是将这种代码放在config目录中的after_start.js文件中,Geddy在服务器启动后运行。在这种情况下,这也应该作为一种解决方法,你自己将Socket.io连接到服务器。

这显然不太理想,v0.12的主要目标是修复RT集成,因此它更加实用和有用。如果您对如何看待它的看法有所了解,请务必在IRC(Freenode.net上的#geddy)或邮件列表(https://groups.google.com/group/geddyjs)上打我们。