gatewayworker 前后端通信

gatewayworker的环境搭建看我之前的文章

首先,运行start_for_win.bat启动服务

接着配置start_gateway.php文件,确保websocket通信

new Gateway("WebSocket://0.0.0.0:8282");

后端配置好后,用前端连接

直接上前端代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>

		<script>
			 let yuming = '127.0.0.1'
			 let ws = new WebSocket("ws://" + yuming + ":8282")
			 // 当socket连接打开时,输入用户名
			 ws.onopen = function(e) {
			 	console.log(e, "websocket握手成功,发送登录数据");
			 }
			 // 当有消息时根据消息类型显示不同信息
			 ws.onmessage = function(e) {
			 	console.log(e, "onmessage");
			 }
		</script>

	</body>
</html>

如果一切正常的话,控制台运行结果如下

前后端实现正常通信

接下来实现后端发消息给前段

新建控Worker制器

php think make:controller index/Worker

引入GatewayClient

<?php

namespace app\index\controller;

use think\Controller;
use think\Request;
// GatewayClient 3.0.0版本以后加了命名空间
use GatewayClient\Gateway;

/**
 * === 指定registerAddress表明与哪个GatewayWorker(集群)通讯。===
 * GatewayWorker里用Register服务来区分集群,即一个GatewayWorker(集群)只有一个Register服务,
 * GatewayClient要与之通讯必须知道这个Register服务地址才能通讯,这个地址格式为 ip:端口 ,
 * 其中ip为Register服务运行的ip(如果GatewayWorker是单机部署则ip就是运行GatewayWorker的服务器ip),
 * 端口是对应ip的服务器上start_register.php文件中监听的端口,也就是GatewayWorker启动时看到的Register的端口。
 * GatewayClient要想推送数据给客户端,必须知道客户端位于哪个GatewayWorker(集群),
 * 然后去连这个GatewayWorker(集群)Register服务的 ip:端口,才能与对应GatewayWorker(集群)通讯。
 * 这个 ip:端口 在GatewayClient一侧使用 Gateway::$registerAddress 来指定。
 * 
 * === 如果GatewayClient和GatewayWorker不在同一台服务器需要以下步骤 ===
 * 1、需要设置start_gateway.php中的lanIp为实际的本机内网ip(如不在一个局域网也可以设置成外网ip),设置完后要重启GatewayWorker
 * 2、GatewayClient这里的Gateway::$registerAddress的ip填写填写上面步骤1lanIp所指定的ip,端口
 * 3、需要开启GatewayWorker所在服务器的防火墙,让以下端口可以被GatewayClient所在服务器访问,
 *    端口包括Rgister服务的端口以及start_gateway.php中lanIp与startPort指定的几个端口
 *
 * === 如果GatewayClient和GatewayWorker在同一台服务器 ===
 * GatewayClient和Register服务都在一台服务器上,ip填写127.0.0.1及即可,无需其它设置。
 **/

class Worker extends Controller
{
    public function index()
    {
        $this->send();
        return 'wgzimg';
    }
    public function send(){
        Gateway::$registerAddress = '127.0.0.1:1238';
        Gateway::sendToAll('hello wgzimg');
    }
}

浏览器输入地址 http://127.0.0.1:6666/index/Worker/index

查看聊天室页面

服务端向客户端发送成功

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值