標題說明了all.Here的我的代碼上:
(Shell script)
$loop = React\EventLoop\Factory::create();
$pusher = new MyApp\Chat;
//Receiving IPC messages:
$socket = new React\Socket\Server($loop);
$socket->on('connection', function ($conn) {
$pusher = new MyApp\Chat;
echo date('H:i:s'). "!!IPC Connection opened!!\n";
$conn->on('data', array($pusher, 'onUpdate'));
});
$socket->listen(1337, '127.0.0.1'); //Binding to our IP so remotes can't connect.
echo "%%% IPC listener started succesfully. %%%\n%%%\n";
// WebSocket server:
//here the code is identical to that on the Ratchet 'push-server' tutorial
...和「的onUpdate」功能.. 。
public function onUpdate($entry)
{
echo(date('H:i:s'). ": !<<---IPC Data Received.DATA:::". $entry. ":::--->>!\n");
$topic = 'Prime_mover';
$topic->broadcast($entry);
}
...的 「onPublish」 功能:
public function onPublish(Conn $conn, $topic, $event, array $exclude, array $eligible)
{
echo $topic. "\n";
//echo implode(array_keys($topic)). "\n";
$channel = $topic->getId();
if($topic->broadcast($event))
{
echo(date('H:i:s') . ": ***A client has published ###" .
implode('', $event) . "### to (((". $channel. ")))***\n");
} else {
echo(date('H:i:s'). ": !!<--An error occured during publish-->!!\n");
}
}
的客戶端代碼是微不足道的。
我確定這個錯誤,如果有的話(我已經在這裏約10個小時),不居住在那裏。
我通過控制檯確認瀏覽器確實訂閱了「Prime_mover」。這也顯示在CLI上。另外,我已經通過「onPublish」功能發佈了一個按鈕,發佈到此頻道。這工作。
從上面可以看出,我並沒有爲IPC使用ZeroiMQ,因爲我正在使用PHP 5上的Windows計算機進行開發。AFAIK,PHP5中沒有可用的ZeroMQ綁定。
我訴諸於使用裸露的套接字。它們的工作方式同樣精美,我可以在CLI上看到消息確實會傳送給特定的腳本。
「onUpdate」函數通過CLI再次被調用,確認。
我以前曾嘗試使用URL「http:\ example.com \ Prime_mover」,當它沒有工作時,出於絕望,我嘗試了字符串「Prime_mover」。你現在可能正在搖頭 - 我知道,這種方式不行。
我曾嘗試使用$ topica作爲數組太大,不幹活。在這裏想最重要的問題是,什麼樣的對象是$話題,爲什麼不會成爲一個簡單的字符串工作的地方嗎?上午我在這裏錯過了什麼?它是如何正確構建的?
謝謝你回答,Sharom。我知道它看起來有多可笑,但是如果你看看棘輪式推送集成教程,並且除非我誤會(我懷疑是這種情況),否則會發生同樣的事情,如下所示:$ topic = $ this-> subscribedTopics [$ entryData [ '貓']; $ topic->廣播(); $ topic分配值「kittensCategory」。 Aplogies沒有正確格式化代碼,目前在mobile.I將不勝感激,如果你爲我清除了這個。 – automaton
沒問題。但我認爲這個話題沒有意義。 –