2016-08-12 10 views
0

PHPウェブソケットでチャットを作成しました。私は、セッションに関するユーザーに関するデータを保存し、そのデータをwebsockets経由の活動に基づいてリアルタイムで変更して読みたいと思っています。 インターネットで見つかったように、スクリプト(プロセス)が実際にWebSocketであるときにセッションを使用することはできません。また、セッションデータはお互いに待つ他のプロセスから変更できるので、私にとっても論理的です。 プロセスは決して完了していないため、ソケットスクリプトは停止しないので、ソケットからセッションを読み書きすることはできません。PHPがソケットのコンテキストでセッションのようにデータを管理する

セッションと同じようにデータを読み書きするにはどうすればよいですか?(同じスクリプト内の)ソケットと組み合わせてセッションを使用することはできませんか? (もちろん、ソケットなしのシンプルなPHPページでは、セッションを使用できます)。

+0

この場合、私が以前にしたことは、データベースにユーザ名を持つ一意のIDを保存することでした。ログイン時にそのIDをセッションに設定し、そのIDでソケットにポストリクエストを行います。ソケットはidに基づいて実際のユーザー名を取得できます。技術的にユーザーがリクエストヘッダーを修正し、誰かの一意のIDを推測しようとする可能性があるため、100%安全ではありません。しかし、プレーンなユーザー名を送信するよりもはるかに安全です。 – icecub

答えて

0

メモリ内のデータキャッシュがお客様のニーズに合っている必要があります。データベースやファイルよりもアクセスが速いデータを読み書きする共通の場所を、異なるプロセスに提供します。

MemcachedまたはMemcacheを確認してください。どちらもMemcachedサーバとリンクするPHP拡張モジュールです。拡張機能とサーバは、PDOとMySQLi拡張がMySQLサーバとやりとりするのと同じように多くのことを行います。したがって、拡張機能の1つを選択してサーバをインストールする必要があります(Memcached homepage

値を設定して取得するのは簡単です。例:

$cache = new Memcache(); 
$cache->connect('localhost', 11211); // connect to localhost on port 11211 
$retrievedVal = $cache->get('some_key'); //get a value from the cache. 

$cache->set($keyname, $value, 0, 15*60); //store value in cache for 15 minutes 

同じホストに接続するすべてのスクリプトは、同じキャッシュされた値にアクセスできます。

関連する問題