问题描述
我仍然对我的解释感到困惑。现在,我将laravel与laradock结合使用,并在docker上插入。现在,我尝试在其上实现websocket。在我完成所有安装和设置之后。我现在仍然能够发送消息。这是我到目前为止所做的事情
docker版本2.3.0.3
compose.json
"beyondcode/laravel-websockets": "1.4.1","pusher/pusher-PHP-server": "3.4.1",
package.json
"laravel-echo": "1.8.1","pusher-js": "4.3.1",
在工作区/ Dockerfile中添加
EXPOSE 6001
在docker-compse.yml中添加
services:
workspace:
ports:
- "6001:6001"
laravel-echo-server:
build:
context: ./laravel-echo-server
volumes:
- ./laravel-echo-server/laravel-echo-server.json:/app/laravel-echo-server.json:ro
ports:
- "${LaraVEL_ECHO_SERVER_PORT}:6001"
links:
- redis
networks:
- frontend
- backend
当我检查docker-compose ps时。这个结果
Name Command State Ports
-----------------------------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp,2376/tcp
laradock_mongo_1 docker-entrypoint.sh mongod Up 0.0.0.0:27017->27017/tcp
laradock_MysqL_1 docker-entrypoint.sh MysqLd Up 0.0.0.0:3306->3306/tcp,33060/tcp
laradock_Nginx_1 /docker-entrypoint.sh /bin ... Up 0.0.0.0:443->443/tcp,0.0.0.0:80->80/tcp,0.0.0.0:81->81/tcp
laradock_PHP-fpm_1 docker-PHP-entrypoint PHP-fpm Up 9000/tcp
laradock_PHP-worker_1 /usr/bin/supervisord -n -c ... Up
laradock_PHPmyadmin_1 /docker-entrypoint.sh apac ... Up 0.0.0.0:8084->80/tcp
laradock_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:6001->6001/tcp
'connections' => [
'pusher' => [
'driver' => 'pusher','key' => env('PUSHER_APP_KEY'),'secret' => env('PUSHER_APP_SECRET'),'secret' => null,'app_id' => env('PUSHER_APP_ID'),'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),'encrypted' => false,'host' => 'localhost','port' => 6001,'scheme' => 'http','curl_options' => [
CURLOPT_SSL_VERIFYHOST => 0,CURLOPT_SSL_VERIFYPEER => 0,]
],],
'dashboard' => [
'port' => env('LaraVEL_WEBSOCKETS_PORT',6001),'apps' => [
[
'id' => env('PUSHER_APP_ID'),'name' => env('APP_NAME'),'path' => env('PUSHER_APP_PATH'),'capacity' => null,'enable_client_messages' => false,'enable_statistics' => true,'app_provider' => BeyondCode\LaravelWebSockets\Apps\ConfigAppProvider::class,
在resource \ js \ bootstrap.js
import Echo from "laravel-echo"
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',key: 'websocketkey',wsHost: window.location.hostname,wsPort: 6001,encrypted: false,disableStats: true,enabledTransports: ['ws','wss']
});
<script>
Echo.channel('campaign')
.listen('DeckCompleteMessage',(e) => {
console.log('Got event...');
console.log("Websocket: "+e);
});
</script>
然后我运行此命令来运行websocket
PHP artisan websocket:serve
直到此设置。可以连接http:// localhost / laravel-websockets。但我无法发送的问题
这是我发送消息的方式。
首先,我在app \ Console \ Commands \ TestEventCommand.PHP中创建命令代码
<?PHP
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Events\DeckCompleteMessage;
class TestEventCommand extends Command
{
protected $signature = 'event:test {id?}';
protected $description = 'Testing Event sending using Websocket';
public function __construct()
{
parent::__construct();
}
public function handle()
{
\Log::info('sending broadcast from test event');
broadcast(new DeckCompleteMessage($this->argument('id')));
}
}
然后我在app \ Events \ DeckCompleteMessage.PHP中创建新的事件文件
<?PHP
namespace App\Events;
use Auth;
use Illuminate\broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\broadcasting\PrivateChannel;
use Illuminate\broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\dispatchable;
use Illuminate\broadcasting\InteractsWithSockets;
use Illuminate\Contracts\broadcasting\Shouldbroadcast;
class DeckCompleteMessage implements Shouldbroadcast
{
use dispatchable,InteractsWithSockets,SerializesModels;
public $user;
public $message;
public function __construct($message)
{
$this->user = Auth::user();
$this->message = $message;
}
public function broadcastOn()
{
return new Channel('campaign');
}
}
所以在终端上,我只运行命令PHP artisan event:test 123
但是什么也没发生。我该如何解决这个问题..对此真的感到困惑
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)