2013-07-02 5 views
2

Итак, я пытаюсь перенести свой проект с разработки на производство, размещенный с модулем.io.Socket.io Fails On Every Emit

Проблема в том, что каждый раз, когда я пытаюсь испустить или получить данные между сервером < -> клиентское соединение, приложение выходит из строя на сервере.

Это ошибка, я получаю:

/mnt/data/2/node_modules/socket.io/lib/parser.js:75 
     data = JSON.stringify(ev); 
       ^
TypeError: Converting circular structure to JSON 
    at Object.stringify (native) 
    at Object.exports.encodePacket (/mnt/data/2/node_modules/socket.io/lib/parser.js:75:19) 
    at Socket.packet (/mnt/data/2/node_modules/socket.io/lib/socket.js:212:21) 
    at Socket.emit (/mnt/data/2/node_modules/socket.io/lib/socket.js:368:15) 
    at null.<anonymous> (/mnt/data/2/server/*******/*******.coffee:36:52) 
    at wrapper [as _onTimeout] (timers.js:252:14) 
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15) 

Вот где я с отладкой:

  • Это линия, где ошибка, хотя иногда в других местах, в зависимости от того, кто пытается испускают событие: первый

    Vent.socket?.emit('event', @)

  • Socket.io работает, как ожидалось на localhost

  • Socket.io успешно подключается к клиенту перед отказом (от хромированная Дев инструментов):

    • XHR finished loading: "http://********.onmodulus.net/socket.io/1/?t=1372727710817". socket.io.js:1659

    • XHR finished loading: "http://********.onmodulus.net/socket.io/1/xhr-polling/sKNz7RX5j2fo-Rku8bDb?t=1372727711281".

  • Socket.io будет подключаться к серверу и работать до тех пор, пока не будет tr у либо испускать или реагировать на событие

Кроме того, если это помогает здесь мое Событию агрегатора класс:

module.exports = class Events extends events.EventEmitter 

    constructor: (io) -> 
    self = @ 
    @io = io 
    @socket = null 

    @io.configure(
     () => 
      console.log 'configuring socket.io...'.yellow 
      @io.set("transports", ["xhr-polling"]) 
      @io.set("polling duration", 10) 
    ) 

    @io.sockets.on('connection', 
     (socket) => 
     @socket = socket 
     console.log 'socket connected' 

     socket.on('client', (event, arg) -> 
      if arg? 
       self.emit(event, arg) 
      else 
       self.emit(event) 
     ) 
    ) 
+0

Любовь, чтобы попытаться отследить это. Вам нужно увидеть еще какой-нибудь код, прежде чем иметь хорошую идею. –

+0

Ах, я уже нашел ошибку. Я ценю предложение, хотя! –

ответ

0

После долгих волос-вытягивать отладки я обнаружил, что, когда JSON.stringify() пытается stringify круговой объект , т.е. объект самореференции, функция будет бесконечно работать из-за рекурсии.

Chrome sendrequest error: TypeError: Converting circular structure to JSON

Так что, когда я попытался запустить код, приведенный ниже, @ (эквивалент this в CoffeeScript) была самостоятельной реферирование, и поэтому создал бесконечный цикл и разбился Socket.io.

Vent.socket?.emit('event', @) 
Смежные вопросы