0

我在客户端使用这个

<script type="text/javascript" src="http://domain.com:8440/socket.io/socket.io.js"></script>

当服务器太忙时,有时会在客户端出现“io not defined”错误。我该如何解决这个问题?

这是我的服务器代码

var db_helper = require("./db.js");
var io=require('socket.io').listen(8440);
var check = require('validator').check,
    sanitize = require('validator').sanitize;
var roomid=0;
var anonid;
var ilet;
var userip;
var blck_id;

  io.set('transports', [

  , 'xhr-polling'
  , 'websocket'
  , 'jsonp-polling'
  ]);

该服务器具有 16 GB RAM 和 13.6 GHz CPU。

4

3 回答 3

3

请记住 node.js 应用程序在单个线程中运行,除非您使用 Cluster 之类的东西来运行更多。这意味着如果你正在做一些阻塞的事情,对http://domain.com:8440/socket.io/socket.io.js的请求可能会超时,这会导致你的 io not defined 错误。如果/何时发生这种情况,您也应该在控制台日志中看到 404 错误。

于 2013-08-13T07:57:31.623 回答
1

试试这个,

获取客户端 socketio 库并将其放在提供 js 文件的文件夹中。将脚本位置指向此文件位置。

您将在此处找到客户端脚本

 <server node_moudules>\socket.io\node_modules\socket.io-client\dist\socket.io.js

首先,正如@Timothy 指出的那样,尝试找出节点变得忙碌的原因。

于 2013-08-13T08:02:35.547 回答
0

正如 Chandu 指出的那样,您可以尝试从常规 Web 服务器提供 socket.io.js 文件。这至少应该从该负载中卸载 node.js 服务器。

其次——这更重要——看看是什么阻止了你的 node.js 服务器。由于 node.js 是单线程的,你应该尽量避免长时间运行的操作。你能举一个你在节点中运行的代码的例子吗?

于 2013-08-13T09:33:21.313 回答