我最终使用了brainboxlabs的brainsocket(https://github.com/BrainBoxLabs/brain-socket)。正如其文档所说,它的laravel 4软件包,但它也可以与laravel 5一起使用,没有任何问题。
使用 laravel 5 安装此软件包。按照上面的github链接上的文档进行操作。它说要创建事件的地方.php应用程序文件夹中的文件和一些与事件相关的代码。无需此步骤,只需将该事件相关代码添加到应用/提供程序/事件服务提供程序.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';
在应用/开始/全局.php 中。您可以将此步骤留给 laravel 5。
好的,所以Web套接字已经实现。您可以通过运行以下命令 ,使用 cmd 启动 websocket 服务器来进行测试。您可以选择为其提供端口工匠大脑插槽:start 9000artisan brainsocket:start
另一个要求是调用控制器来执行其余任务。为此,我直接编辑到提供者包。我不建议这样做,因为这不是一个好方法。当您使用编辑器更新软件包时,您的更改将丢失。所以你必须找到一个更好的选择。但它只是一行变化。
在 vendor\brainboxlabs\brain-socket\src\BrainSocket\BrainSocketServer 中.php我在方法“start”中编辑代码并替换
$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
);
在我的同步控制器文件中。
我在顶部添加了这个
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/。
如果有人需要有关其实施的更多帮助,请告诉我。