我正在使用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.
我不知道是什么原因引起的。有什么想法吗?
答案 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)上打我们。