2012-03-28 7 views
3

私はchat.phpにsocket.phpソケットファイルを含んでいます。 socket.phpファイル内の行PHPファイルをXAMPPとphpコマンドラインで実行する

socket_bind($master, $address, $port); 

$address = "localhost"$port=1300があります。

しかし、私は、ブラウザ上に置いたときに(とXAMPP からApacheがアップしている)http://localhost/demo/chatdemo.phpそれは言う:だから

Warning: socket_bind() [function.socket-bind]: unable to bind address [48]: 
Address already in use in /Applications/XAMPP/xamppfiles/htdocs/demo/socket.class.php on line 23 
socket_bind() failed 

、代わりに、私のgotoコマンドラインと

php -q /demo/chatbot.demo.php 
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/Los_Angeles' for 'PDT/-7.0/DST' instead in /demo/socket.php on line 21 
Server Started : 2012-03-27 17:24:24 
Listening on : localhost port 13000 
Master socket : Resource id #5 
をしました

質問:私はchathosto.phpをlocalhost(XAMPPを使用)のブラウザで実行できないのに対して、php(非XAMPP)を使用してコマンドラインで実行できるのはなぜですか?

+0

なぜあなたはWebサーバー経由でチャットデーモンを実行しますか? –

+0

Chatdemo.phpはデーモンではなく、アプリですが、デーモンsocket.phpが必要です。 – lilzz

答えて

1

Webサーバーが(ポートをリッスンして接続を許可する)サーバーを実行しようとしてもいけません。 Webサーバーは、リクエストを処理し、必要に応じてPHPスクリプトを呼び出します。あなたのスクリプトは30秒で終了します。これは予想される動作です。しかし、あなたがサーバーを走らせるとき。物語は違う。それは24/7を実行します。 Webサーバーについて考えると、24時間365日稼働します。もちろん、あなたのサーバーはこれよりもはるかに少ない実行時間を持つことができます。しかし、あなたがスレッドのWebサーバー1の下で実行する場合、すべての要求に対して長い時間ブロックされます。

サーバーは単独で実行する必要があります。あなたの場合は、コマンドラインから実行する必要があります。

さらに読んでください。コマンドラインでの警告のために

  1. Client-server architecture
  2. Socket states and the client-server model

ちょうどあなたの場所に応じてphp.inidate.timezone設定を変更します。私は使用しています

date.timezone = "Asia/Dhaka" 
+0

どのようにコマンドラインでchatdemo.phpアプリケーションを実行しますか?グラフィカルな出力は表示されません。もし私がphp -q chatdemo.phpを実行したとしたら、それは動作していると言われますが、出力は表示されません。 – lilzz

+0

デーモン/サーバー。それは実行されている必要があります。それと通信するにはクライアントが利用可能でなければなりません。クライアントは、13000ポートを超えるサーバーと通信する必要があります。 –

+1

@lilzz Linuxの場合は、 '' netstat -nplnt''を試してください。それはすべてのリスニング接続をリストし、13000ポートを表示しているはずです。 – elias

関連する問題