2013-11-14 5 views
0

Я делаю приложение в реальном времени с geddy framework (основной пример чата). Но я получаю и ошибки, когда клиент пытается установить соединение.geddy with socket.io error

вот код на стороне сервера (на 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) должно поместить этот вид кода в файл after_start.js в каталог конфигурации, который Geddy запускает после запуска сервера. Это также должно быть обходным путем в этом случае, когда вы подключаете Socket.io к серверу самостоятельно.

Это, очевидно, не идеально, и главная цель для v0.12 - установить интеграцию RT, чтобы она была более удобной и полезной. Если у вас есть вклад в то, как вы думаете, что это должно выглядеть, определенно попал в IRC (#geddy на Freenode.net) или в список рассылки (https://groups.google.com/group/geddyjs).