2013-11-14 49 views
0

我正在做一个geddy框架(基本聊天示例)的实时应用程序。但是,当客户端尝试建立连接时,我会收到错误消息。geddy与socket.io错误

这里的服务器端代码(在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' }); 
    }); 
} 

当我尝试连接到本地主机: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. 

我不知道什么会导致这些。有任何想法吗?

回答

0

问题是,Socket.io需要在服务器启动后连接到服务器,直到init.js中的代码运行后服务器才启动。现有内置RT代码(Geddy v0.11版本)中的当前(hacky)解决方案是将此类代码放置在配置目录中的after_start.js文件中,该目录在服务器启动后运行Geddy。在这种情况下,这也应该作为一种解决方法,您可以自己将Socket.io连接到服务器。

这显然不理想,v0.12的一个主要目标是修复RT集成,所以它更加实用和有用。如果你对你的看法有什么看法,绝对可以在IRC(Freenode.net上的#geddy)或邮件列表(https://groups.google.com/group/geddyjs)上找到我们。