我已经在我的服务器上设置了一个节点应用程序,我可以ssh进入我的目录并运行
node server.js
伟大的服务器启动和运行正常,但只要我关闭我的ssh窗口和注销节点服务器停止,我得到io.socket没有定义等等。
这是我的server.js
var port = process.env.PORT || 1337;
var io = require('socket.io').listen(port);
var archiveMessages = {};
var channels = ['foo channel', 'bar channel'];
var chat = io.of('/chat');
chat.on('connection', function(socket){
console.log('connected: %s', socket.id);
// push available channel list
socket.emit('available_channel', channels);
socket.on('join', function(value){
console.log('%s joined channel: %s', socket.id, value.channelId);
socket.join(value.channelId);
socket.set('channel_id', value.channelId, function(){
var messages = archiveMessages[value.channelId] || [];
socket.emit('joined', messages);
socket.broadcast.to(value.channelId).emit('user:join', {
id: socket.id
});
});
});
socket.on('post', function(message){
socket.get('channel_id', function(err, channelId){
console.log('%s says<%s channel>: %s', socket.id, channelId, message);
if(!(channelId in archiveMessages)){
archiveMessages[channelId] = [];
}
archiveMessages[channelId].push(message);
socket.emit('posted', {
message: message
});
socket.broadcast.to(channelId).emit('user:message', {
id: socket.id,
message: message
});
});
});
socket.on('disconnect', function(){
console.log('%s disconnected', socket.id);
socket.get('channel_id', function(channelId){
socket.leave(channelId);
socket.broadcast.to(channelId).emit('user:leave', {
id: socket.id
});
});
});
});
var image = io.of('/image');
image.on('connection', function(socket){
socket.on('upload', function(param){
console.log('upload base64 size: %d', param.base64.length);
if(param.download){
socket.emit('download', {
base64: 's' + new Array(65534).join('0') + 'e'
});
}
});
});
如何让这台server.js不断运行。
由于
答案 0 :(得分:4)
您需要使用Forever将Node应用程序作为服务/守护程序运行。或者,您仍希望通过SSH在shell上运行它,使用screen
或tmux
之类的内容。
永远使用:
How does one start a node.js server as a daemon process?
使用屏幕:
http://www.rackaid.com/resources/linux-screen-tutorial-and-how-to/
使用Tmux:
http://blog.hawkhost.com/2010/06/28/tmux-the-terminal-multiplexer/
答案 1 :(得分:1)
正如JP所说,Forever是一个不错的选择。
同时,如果您在某种类型的Unix变体盒(如LINUX或Mac)上运行,那么您已经拥有了所需的一切。只需运行以下命令:
nohup node server.js &
这将在后台启动您的节点应用程序,并将应用程序中的所有控制台输出重定向到名为“nohup.out”的本地文件。
Forever的好处是,如果它崩溃,它将重启你的服务器进程。
注意:如果计算机重新启动,则不会单独一个人重新启动服务器应用程序。
答案 2 :(得分:-1)
我相信你需要使用第三方工具来保持它的运行。像是在IIS上的IISNode,或者在Linux上的nginx,为你管理Node。