31

私はnode.jsに頭を悩ませようとしています...

現在、私の要件を満たしているため、LAMP のセットアップに非常に満足しています。PHPアプリにいくつかのリアルタイム機能を追加したいのですが。現在自分のサイトにログインしているすべてのユーザーと可能なチャット機能を表示するなど。

PHP バックエンドを置き換えたくはありませんが、スケーラブルなリアルタイム ソリューションが必要です。

1. アプリケーションのサーバー側スクリプト全体を再構築せずに、node.js をミックスに投入してニーズを満たすことはできますか?

2. node.js が私の「チャット」機能と「現在ログイン中」機能をどのように提供するのが最善でしょうか?

あなたの意見を聞くのは素晴らしいことです!

W.

4

5 に答える 5

23

node.js と一緒に Socket.io を使用することをお勧めします。http://socket.io/からライブラリをインストールしてダウンロードします。Apache サーバーと一緒に問題なく実行できます。

最初にノード サーバーを作成します。

var http = require('http')
  , url = require('url')
  , fs = require('fs')
  , io = require('../')//path to your socket.io lib
  , sys = require(process.binding('natives').util ? 'util' : 'sys')
  , server;

server = http.createServer(function(req, res){
  var path = url.parse(req.url).pathname;
}),

server.listen(8084);//This could be almost any port number

次に、次を使用してコマンドラインからサーバーを実行します。

node /path/to/your/server.js

3 番目に、クライアント側の js を使用してソケットに接続します。

var socket = new io.Socket(null, {port: 8084, rememberTransport: false});
socket.connect();

socket.io lib クライアント側も含める必要があります。

以下を使用して、クライアント側からノードサーバーにデータを送信します。

socket.send({data:data});

server.js には、リクエストを処理するための関数も必要です。

io.on('connection', function(client){
//action when client connets

 client.on('message', function(message){
    //action when client sends msg
  });

  client.on('disconnect', function(){
    //action when client disconnects
  });
});

サーバーからクライアントにデータを送信するには、主に次の 2 つの方法があります。

client.send({ data: data});//sends it back to the client making the request

client.broadcast({  data: data});//sends it too every client connected to the server
于 2011-02-16T11:07:17.663 に答える
2

チャットとログイン リストは、Ajax 経由で機能すると思われます。

チャット部分は Node.js でプログラムするのが非常に簡単です。Node 用のmysql モジュールの 1 つを使用して既存のデータベースに接続し、ログイン情報などを照会してから、Node.js を介して実際のすべてのチャットを行います。 Browser/Node.js の通信が非常に簡単になるため、 Socket.ioを確認してください。これにより、実際のチャット ロジックに集中できるはずです。

また、インスピレーションを得るために、Node.jsの「公式」チャット デモを参照することもできます。

現在オンラインの部分に関する限り、これを実装するのは決して簡単ではありません。これは、「過去 X 分間にアクティブなユーザーが 5 人」という行に沿って何かを表示することしかできないためです。

もちろん、チャット サーバーにクエリを実行し、そこからユーザー リストをホームページに表示する Ajax を簡単に追加することもできます。

または、すべての訪問者に対して Socket.io 接続を確立し、この方法で監視しますが、これが努力する価値があるかどうかは疑問です。

于 2011-01-09T21:26:25.047 に答える
1

pedro が ngnx で行ったように、ソケット ファイルを使用するのはどうですか? http://nodetuts.com/tutorials/25-nginx-and-nodejs.html

于 2011-08-15T17:13:16.950 に答える
0

LAMP セットアップと一緒に wss (セキュア Websocket) サーバーを実行しています。

Node.js は、必要な他の Web サーバー (Apache) と一緒に簡単に実行できます。@KitCarrau の例では、彼はノードをポート 8084 で実行できるようにしています。これは、80 や 443 などではなく、ノードが実行され、リッスンされている場所です (いずれにせよ、これらは通常、Apache によって取得されます)。ただし、同じポートを使用して http/https を提供することもできます (私の場合は、いくつかの conf とサービスが稼働しているという一般的な情報を述べているだけです)。

コンソールから開始するのは最善の方法ではありません (リモートでは、コンソールを閉じるとノードが停止します)。Running node as serviceをご覧になることをお勧めします

以下を使用して、ログをリアルタイムで簡単に追跡できます (アプリケーションで console.log("hello"); を使用してログを記録します)。

tail -f /var/.../SocketServer.log

サンプル スクリプト (node-server.conf):

author ....    
description "node.js server"    
# used to be: start on startup
# until we found some mounts weren't ready yet while booting:

start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

# Max open files are @ 1024 by default. Bit few.
limit nofile 32768 32768

script
    # Not sure why $HOME is needed, but we found that it is:
    export HOME="/root"

    exec node /var/.../SocketServer.js >> /var/www/node/.../SocketServer.log 2>&1
end script

post-start script
   # Optionally put a script here that will notifiy you node has (re)started
   # /root/bin/hoptoad.sh "node.js has started!"
   echo "\n*********\nServer started\n$(date)\n*********" >> /var/.../SocketServer.log

end script
于 2014-11-11T14:36:31.103 に答える