我收到“io 未定义”错误

问题描述 投票:0回答:3

我在客户端使用这个

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

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

这是我的服务器代码

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。

node.js socket.io
3个回答
3
投票

请记住,node.js 应用程序在单线程中运行,除非您使用 Cluster 之类的东西来运行更多应用程序。这意味着,如果您正在执行阻止的操作,则对 http://domain.com:8440/socket.io/socket.io.js 的请求可能会超时,这将导致您的 io 未定义错误。如果发生这种情况,您也应该在控制台日志中看到 404 错误。


1
投票

试试这个,

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

您可以在这里找到客户端脚本

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

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.