我需要在Laravel中實現非常簡單和非常基本的websocket,以實現我的phonegap應用程序作爲客戶端和我的Laravel網站作爲服務器之間的數據同步過程。我遵循這個教程http://www.binarytides.com/websockets-php-tutorial/來實現和測試websocket,它的工作原理。像這樣我需要非常簡單的laravel實現,我可以從js客戶端調用我的控制器方法。客戶端將成爲我的phonegap應用程序。我在laravel的教程中找到了一些websocket的包,但是我發現很難實現它們。沒有人與控制器進行交互,他們正在傾聽事件並在各處創建類,但不在控制器中。我已經將所有的邏輯寫入Controller,並用ajax請求對其進行了測試,但現在我將通過websocket實現它,因爲我需要雙向通信來實現同步過程。我是Laravel的新手,所以請給我一些幫助。如果有人能告訴我如何將關於laravel的教程集成到客戶端,以便客戶端可以直接調用控制器來發送數據,那麼這將非常棒。laravel 5中簡單的websocket實現
回答
我結束了使用brainboxlabs的brainsocket(https://github.com/BrainBoxLabs/brain-socket)。正如其文檔所述,其laravel 4軟件包,但它也適用於laravel 5沒有任何問題。
用laravel安裝此包5.按照上述github鏈接上的文檔。它說在app文件夾中創建一個event.php文件,以及一些與事件相關的代碼。代替這一步,只需在app/Providers/EventServiceProvider.php文件中添加與事件相關的代碼即可。在它的引導方法中,添加代碼是
Event::listen('generic.event',function($client_data){
return BrainSocket::message('generic.event',array('message'=>'A message from a generic event fired in Laravel!'));
});
Event::listen('app.success',function($client_data){
return BrainSocket::success(array('There was a Laravel App Success Event!'));
});
Event::listen('app.error',function($client_data){
return BrainSocket::error(array('There was a Laravel App Error!'));
});
在該步驟之後有在應用程序中添加
require app_path().'/filters.php';
require app_path().'/events.php';
的步驟和/開始/ global.php。你可以離開這一步laravel 5.
好吧,所以Web套接字已經實現。您可以運行命令artisan brainsocket:start
,使用cmd啓動websocket服務器進行測試。您可以選擇提供端口工匠brainsocket:start 9000
另一個要求是調用controller來執行其餘任務。對於這個我直接編輯到提供程序包。我不推薦這樣做,因爲這不是一個好方法。當您使用作曲家更新您的軟件包時,您的更改將會丟失。所以你必須找到一個更好的選擇。但它只是一個改變。
在供應商\ brainboxlabs \腦插座的\ src \ BrainSocket \ BrainSocketServer.php我編輯的方法代碼 「開始」 和替換
$this->server = IoServer::factory(
new HttpServer(
new WsServer(
new BrainSocketEventListener(
new BrainSocketResponse(new LaravelEventPublisher())
)
)
)
, $port
);
與
$this->server = IoServer::factory(
new HttpServer(
new WsServer(
new \FMIS\Http\Controllers\SynchronizationController(
new BrainSocketResponse(new LaravelEventPublisher())
)
)
)
, $port
);
在我SynchronizationController文件。
我加入這個頂部
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
use BrainSocket\BrainSocketResponseInterface;
執行的界面這個樣子。
class SynchronizationController extends Controller implements MessageComponentInterface{
並實現了該接口的方法。
public function __construct(BrainSocketResponseInterface $response) {
$this->clients = new \SplObjectStorage;
$this->response = $response;
}
public function onOpen(ConnectionInterface $conn) {
echo "Connection Established! \n";
}
public function onMessage(ConnectionInterface $conn, $msg){
echo "this messge gets called whenever there is a messge sent from js client";
}
public function onClose(ConnectionInterface $conn) {
echo "Connection {$conn->resourceId} has disconnected\n";
}
public function onError(ConnectionInterface $conn, \Exception $e) {
$msg = "An error has occurred: {$e->getMessage()}\n";
echo $msg;
$conn->close();
}
你必須改變這些方法來實現你的功能。之後,您可以從您的js客戶端撥打電話。而且你也不需要使用它的js庫。您只需使用本教程中描述的js客戶端發送數據http://www.binarytides.com/websockets-php-tutorial/。
讓我知道是否有人需要任何更多的幫助其實施。
夥計,令人驚歎的解釋。 +1。我想知道是否可以使用控制器而不必實際修改供應商中的文件?這樣就可以自由安裝laravel更新。謝謝你的幫助。 – Learner
@學習者你可以創建一個擴展brainSocket類的自定義套接字類和命令。不是自己做的,而是看着它,這就是我所要做的。 – sourRaspberri
不幸的是BrainSocket並沒有更新他們的源代碼來與Laravel 5.5一起工作...... – AmjadoV
- 1. 在Laravel 5中實現回購
- 2. 簡單的laravel 5分頁鏈接
- 3. Laravel 5個簡單的比較失敗
- 4. 簡單的php websocket例子
- 5. Simpleton的簡單實現
- 6. 簡單的OpenID實現
- 7. 簡單的OpenGL實現
- 8. 實現最簡單的DHT
- 9. Keras簡單的RNN實現
- 10. 實現簡單的shell
- 11. 在AS3中最簡單的onReleaseOutside實現?
- 12. C++中簡單的hashmap實現
- 13. 在C++中實現簡單的getopt
- 14. 簡單堆棧實現
- 15. Laravel 5:在控制器中返回簡單數據
- 16. HTML 5 WebSocket
- 17. websocket api實現入門
- 18. 在python中簡單實現會話?
- 19. 如何在Laravel 5中實現MongoDB查詢?
- 20. 如何在oriceon/oauth-5-laravel twitter api中實現友誼/存在?
- 21. 在PHP中如何實現WebSocket握手?
- 22. Laravel WebSocket聊天
- 23. 無法創建簡單的websocket - NodeJS
- 24. Laravel的SweetAlert實現
- 25. 簡單的WebSocket客戶端無法連接到tomcat java websocket
- 26. 簡單的狀態消息實現
- 27. 實現一個簡單的線程池
- 28. 什麼是簡單的ParentAdapter實現?
- 29. 實現OAuth2.0的一個簡單例子
- 30. Android C2DM需要的簡單實現
我的建議是在節點服務器下運行Socket.io。 –
我想在客戶端使用簡單的js套接字。因爲它將使用phonegap,所以我想保持簡單。 – hassan
實際上使用socket.io會給你一個很少有幾行代碼的Websocket連接。這就是我個人實現的方式。 –