所以我试图将我的项目从开发转移到生产,并以模数.io托管。
问题在于,每当我尝试在服务器之间发出或接收数据时,< - >客户端连接,应用程序在服务器端失败。
这是我得到的错误:
/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在失败之前成功连接到客户端(来自chrome dev工具):
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将在服务器上连接并运行,直到我尝试发出或响应事件
此外,如果它有助于我的Event Aggregator类:
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)
经过多次拉毛调试后,我发现当JSON.stringify()
尝试stringify
循环对象(即自引用对象)时,该函数将因递归而无限运行。
Chrome sendrequest error: TypeError: Converting circular structure to JSON
因此,当我尝试运行以下代码时,@
(相当于coffeescript中的this
)是自引用的,因此创建了一个无限循环并崩溃了socket.io。
Vent.socket?.emit('event', @)