2014-10-01 83 views
3

我試圖建立一個通知消息系統。我使用SimpleWsServer.php服務器示例。當服務器上的任務完成時,我想將通知推送給用戶的瀏覽器。這需要使用PHP完成,我無法找到一個教程,這顯示。所有的教程似乎都顯示了在PHP服務器作爲管理器運行時發送和接收的tavendo/AutobahnJS腳本。發送消息使用PHP與Voryx高速公路WAMP消息系統

是否可以使用PHP腳本向訂閱者發送消息?

+0

不知道你要拉什麼,但看起來Ajax是這裏的路? – Naruto 2014-10-01 07:27:40

+0

@Naruto ajax不是實時的 – astroanu 2014-10-02 05:27:31

回答

7

Astro,

這實際上非常簡單,可以通過幾種不同的方式完成。我們設計了Thruway客戶端來模仿AutobahnJS客戶端,所以大多數簡單的例子都會直接翻譯。

我假設你想從一個網站發佈(不是長時間運行的PHP腳本)。

在你的PHP的網站,你會想要做這樣的事情:

$connection = new \Thruway\Connection(
    [ 
     "realm" => 'com.example.astro', 
     "url"  => 'ws://demo.thruway.ws:9090', //You can use this demo server or replace it with your router's IP 
    ] 
); 

$connection->on('open', function (\Thruway\ClientSession $session) use ($connection) { 

    //publish an event 
    $session->publish('com.example.hello', ['Hello, world from PHP!!!'], [], ["acknowledge" => true])->then(
     function() use ($connection) { 
      $connection->close(); //You must close the connection or this will hang 
      echo "Publish Acknowledged!\n"; 
     }, 
     function ($error) { 
      // publish failed 
      echo "Publish Error {$error}\n"; 
     } 
    ); 
    }); 

$connection->open(); 

和JavaScript客戶端(使用AutobahnJS)看起來就像這樣:

var connection = new autobahn.Connection({ 
    url: 'ws://demo.thruway.ws:9090', //You can use this demo server or replace it with your router's IP 
    realm: 'com.example.astro' 
}); 

connection.onopen = function (session) { 

    //subscribe to a topic 
    function onevent(args) { 
     console.log("Someone published this to 'com.example.hello': ", args);  
    } 

    session.subscribe('com.example.hello', onevent).then(
     function (subscription) { 
      console.log("subscription info", subscription); 
     }, 
     function (error) { 
      console.log("subscription error", error); 
     } 
    ); 
}; 

connection.open(); 

我也爲javascript端創建了plunker,爲PHP端創建了runnable

+1

哦,我的天哪$ connection-> close();爲什麼我沒有得到那個。謝謝你..我喜歡你們如何模仿高速公路。再次感謝 ! – astroanu 2014-10-02 05:22:56