2015-07-13 50 views
0

我對這個領域的網絡套接字很陌生。我正在嘗試創建一個基於PHP的簡單實時應用程序。我發現Ratchet是PHP的最佳選擇之一,因爲它簡化了原生的PHP套接字編程。我遵循棘輪官方網站hello world中的'Hello world'教程。本教程是基本的,它只是展示瞭如何通過Web瀏覽器控制檯製作整個教程。如何在使用棘輪web插座時定義路線?

根據本教程,它提供了一個簡單的shell腳本,我們需要執行該腳本,以便Ratchet web套接字作爲服務與Apache服務器一起運行。下面是shell腳本:

use Ratchet\Server\IoServer; 
use Ratchet\Http\HttpServer; 
use Ratchet\WebSocket\WsServer; 
use MyApp\Chat; 

    require dirname(__DIR__) . '/vendor/autoload.php'; 

    $server = IoServer::factory(
     new HttpServer(
      new WsServer(
       new Chat() 
      ) 
     ), 
     8080 
    ); 

    $server->run(); 

在上面的代碼,它說,網絡插座是通過port 8080訪問。我去瀏覽器和瀏覽器localhost:8080服務器運行時沒有任何錯誤,瀏覽器中的瀏覽器localhost:8080顯示沒有任何錯誤。我猜一切都很順利。

接下來就是通過在瀏覽器控制檯中提供javascript代碼來完成客戶端的連接。 (以下是javascript代碼)

var conn = new WebSocket('ws://localhost:8080'); 
conn.onopen = function(e) { 
    console.log("Connection established!"); 
}; 

conn.onmessage = function(e) { 
    console.log(e.data); 
}; 

當我運行上面的代碼時,連接建立時沒有任何錯誤。現在的問題是我不知道在哪裏放置上面的JavaScript代碼,這樣我就不必每次都在控制檯中寫入代碼。我想它應該保存在一些JavaScript文件中。以上代碼在端口localhost:8080中運行。但是我怎樣才能明確地提到鏈接localhost:8080/chat.php,其中chat.php將成爲瀏覽器中顯示的所需頁面,也許我可以將上面的JavaScript代碼放在同一個文件中。

我不知道如果我的問題是否有效,我只是這個領域的初學者。我還問過關於同一主題的另一個問題Binding ZMQ Socket and Ratchet,但尚未得到滿足。

回答

1

爲了使用路線,您需要使用內置在棘輪中的Symphony Routing功能。

基本上你的插座初始化是這樣的

$app = new Ratchet\App("localhost", 8080, '0.0.0.0', $loop); 
$app->route('/chat', new Chat, array('*')); 

$app->run(); 

本教程進入更多細節,並解釋了與PHP的WebSockets

https://blog.samuelattard.com/the-tutorial-for-php-websockets-that-i-wish-had-existed/

+0

一些簡單的技巧,但在如何工作的路線:IO服務器: :工廠(新的HttpServer(新的WsServer([...]))); ? –