1

サーバーにノードアプリをセットアップしました。ディレクトリに 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を常に実行し続けるにはどうすればよいですか。

ありがとう

4

3 に答える 3

4

Foreverを使用して Node アプリをサービス/デーモンとして実行する必要があります。または、SSH 経由でシェルで実行したい場合は、screenまたはのようなものを使用しますtmux

永遠に使用する:

node.jsサーバーをデーモンプロセスとして起動するにはどうすればよいですか?

画面の使用:

http://www.rackaid.com/resources/linux-screen-tutorial-and-how-to/

Tmux の使用:

http://blog.hawkhost.com/2010/06/28/tmux-the-terminal-multiplexer/

于 2012-08-28T16:56:27.953 に答える
1

JP が言うように、Forever は良い選択です。

一方、何らかの種類の Unix バリアント ボックス (LINUX や Mac など) で実行している場合は、必要なものがすべて揃っています。次を実行するだけです。

nohup node server.js &

これは、バックグラウンドでノード アプリを開始し、アプリからのすべてのコンソール出力を「nohup.out」という名前のローカル ファイルにリダイレクトします。

Forever の利点は、クラッシュした場合にサーバー プロセスを再起動することです。

注: どちらも単独では、コンピューターが再起動した場合にサーバー アプリを再起動しません。

于 2012-08-28T21:57:19.697 に答える
-1

実行し続けるには、サードパーティのツールを使用する必要があると思います。Windows の場合は IISNode、Linux の場合は nginx などで Node を管理します。

于 2012-08-28T16:54:07.707 に答える