Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么可以';运行node.js&;socket.io在屏幕中还是永久?_Javascript_Node.js_Ubuntu_Express_Socket.io - Fatal编程技术网

Javascript 为什么可以';运行node.js&;socket.io在屏幕中还是永久?

Javascript 为什么可以';运行node.js&;socket.io在屏幕中还是永久?,javascript,node.js,ubuntu,express,socket.io,Javascript,Node.js,Ubuntu,Express,Socket.io,我有一些恼人的问题,那就是我在屏幕上运行nodejs时遇到了麻烦。因为当我离开屏幕并且没有连接插座时,下一个要连接的人将面临一条错误消息,直到屏幕再次打开。使用屏幕-R节点打开屏幕后(例如),它将再次开始接受连接 但是请注意,如果屏幕关闭(在后台运行),并且有人已经打开了一个套接字,它将继续应答新的连接 当我再次尝试启动应用程序时,使用命令node-app会收到以下消息: module.js:340 throw err; ^ Error: Cannot find mo

我有一些恼人的问题,那就是我在屏幕上运行nodejs时遇到了麻烦。因为当我离开屏幕并且没有连接插座时,下一个要连接的人将面临一条错误消息,直到屏幕再次打开。使用
屏幕-R节点打开屏幕后(例如),它将再次开始接受连接

但是请注意,如果屏幕关闭(在后台运行),并且有人已经打开了一个套接字,它将继续应答新的连接

当我再次尝试启动应用程序时,使用命令
node-app
会收到以下消息:

module.js:340
    throw err;
          ^
Error: Cannot find module '(unreachable)/square_defense/app'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)
服务器端代码

var app = require('express')()
  , server = require('http').createServer(app)
  , io = require('socket.io').listen(server);

server.listen(3000);

app.get('/', function (req, res) {
  console.log(__dirname);
  res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {
    socket.on('user-message', function (data) {
        console.log(data);
        sendMessage.call(socket, data.message);
    });
});
var sendMessage = function(message) {
      this.emit('server-message', {message: message});
      this.broadcast.emit('server-message', {message: message});
}
我在app.js的目录
中尝试了很多类似
npm安装app
。我不明白为什么它不想工作。我真的只是想要一个服务器,我可以使用它进行测试,不会崩溃

编辑:我认为这与加密的主文件夹有关


我认为无法访问的文件夹就是问题所在。错误:找不到模块“(无法访问)/square\u defence/app”。但我不知道为什么会这样。现在我正在用Forever运行这个应用程序,只要我有一个ssh会话,它就会工作。但只要我退出连接并重新加载页面。它将生成一个错误。

因为您已经在Ubuntu设备上,我建议使用和,如本文所述:

我唯一添加到混合中的是前端代理服务器(在我的例子中是HAProxy,但nginx也可以),以便在端口80上为我的应用程序提供服务

大约一个月前,我自己在Amazon EC2上部署了一个socket.io/express应用程序,使用该技术堆栈,结果令人惊讶

编辑:

下面是我收集的一些关于使用node.js/nginx/monit/git进行正确生产设置的资源:

  • (一个很棒的导游,帮了我很多忙!)

我真的推荐第一个,您可能需要跳过一些部分(如npm模块安装或系统设置),但是关于nginx/git和supervisor的部分值得一读。

正如您所说,您的主目录是加密的,并且根据:

此目录在登录时自动装入,在注销时自动卸载

所以你的猜测是正确的,这正是导致错误的原因。操作系统不会考虑运行分离的
屏幕
会话,因为用户仍在登录*。当用户的所有shell会话结束时,加密的主目录被卸载


解决方案:您可以将应用程序移动到除
$HOME
以外的目录,然后我认为GNU Screen或forever都可以完成这项工作,不会出现错误。†


*您可以自己测试:登录,启动
屏幕
会话,运行类似于
vim
的程序,分离;使用命令
w
查看谁已登录以及他们正在做什么


†我认为,如果您为此编写自己的upstart脚本,应用程序文件不放在自动加密的主目录中仍然很重要。

@Riwels是的,准确地说是ubuntu 12.04。嗯。。。我可能有这个问题:它是建议你永远使用。你现在知道了我不得不收回这句话,永远似乎会引起同样的问题,但有一个有趣的放纵。如果我通过ssh连接到我的服务器,它工作正常,没有问题。但是,一旦我关闭ssh会话并重新加载页面,我就会得到如下信息:
Error:enoint,stat'/home/jarvis/square\u defence/index.html'
与之前相同,我只能猜测它内部存在与上面相同的错误。我想我得悬赏了。我很肯定我会在upstart和monit上犯同样的错误。我不认为需要代理服务器:)我不需要负载平衡器!upstart和monit的使用并不是专门用来解决您的问题,它是保持节点服务正常运行的一种非常好的方法。由于我从未使用过screen(在我看来总是很粗略),所以我不能给你们一个正确的意见。顺便说一句:在这种情况下,HAProxy不是负载平衡器,它只是应用服务器的前端服务器;)编辑:哦,我很确定这个设置会解决你的问题……现在我使用的是“永远”,如果应用程序停止运行,它会重新启动(上面说)。但是当我使用
永久列表
时,我得到了
信息:没有永久进程在运行
,即使有进程明显在运行。有趣的是,我可以重新启动它,它会工作一段时间。我不确定要多久。但最终它会崩溃。这可能是因为套接字超时而我不处理它们吗?我只在本地开发机器上使用了一个开放终端会话,我真的不能给你这个建议。我一开始在远程服务器上工作,就一直使用git钩子启动upstart/monit/nginx设置,以便在部署时重新启动服务……对不起:/Dude,谢谢。我要试试这个,在我测试了一点之后会回来的。那么明天如果一切顺利的话。您将得到您的奖励:)在我将文件移到主目录之外后,似乎仍在工作。谢谢你:)