折腾了好久,终于知道怎么结合到thinkphp6中用了! 由于php think worker:gateway命令在windows使用会报错GatewayWorker Not Support On Windows.,所有就用虚拟机搞了,centos7.
1.think-worker安装 参考手册:https://www.kancloud.cn/manual/thinkphp6_0/1147857(手册有说怎么使用workman了,就是没说GatewayWorker)
composer require topthink/think-worker
2.think-worker默认是安装了workman和GatewayWorker了,在vendor/workman目录下
3.webcocket事例代码
html:
<!DOCTYPE html><html><head><title>HTML5</title><meta charset="utf-8" /><body> <!-- <a href="javascipt:" class="send">发送</a>--></body><script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script><script>// $('.send').click(function(){// $.ajax({// type: 'POST',// url: "{:url('index/index/send')}",// data: {'id':1},// dataType: 'json',// success: function (data) {// if (data.status == 1) {// alert('发送成功')// // layer.msg(data.msg, { icon: 1, time: 1000 },function(){// // // parent.layer.close(index);// // window.location.reload()// // // parent.location.reload();// // });// } else {// alert('发送失败')// // layer.msg(data.msg, { icon: 2, time: 1000 });// }// },// error: function () {// // layer.alert("服务器繁忙, 请联系管理员!");// },// });// })$(function() {var socket;var readyState = ["connecting", "connected", "closing", "closed"];/* 打开连接事件 */$("button:eq(0)").click(function() {try { /* 连接 *///socket = new WebSocket("ws://39.96.9.241:6789"); socket = new WebSocket("ws://192.168.30.128:2348"); /* 绑定事件 */ socket.onopen = function() { $("#msg").html("连接成功..."); }; socket.onmessage = function(e) { $("#msg").html($("#msg").html() + "<br />" + e.data); };socket.onclose = function() { $("#msg").html($("#msg").html() + "<br />关闭连接..."); };} catch(exception) {$("#msg").html($("#msg").html() + "<br />有错误发生");}});/* 发送数据事件 */$("button:eq(1)").click(function() {/* 检查文本框是否为空 */if($("#data").val() == "") {alert("请输入数据!");return;}try {socket.send($("#data").val());$("#msg").html($("#msg").html() + "<br />发送数据:" + $("#data").val());} catch (exception) {$("#msg").html($("#msg").html() + "<br />发送数据出错");}/* 清空文本框 */$("#data").val("");});/* 断开连接 */$("button:eq(2)").click(function() {socket.close();});});</script></head><body><h1>WebSocket示例</h1><input type="text" id="data" /><button>打开连接</button><button>发送数据</button><button>关闭连接</button><p id="msg"></p></body></html>
4.执行php think worker:gateway
thinkphp6在centos中启动gatewayworker报错Uncaught Error: Call to undefined function posix_getpid();
解决方法:
yum install php-posix
执行这个就不用执行启动workman的命令了
5.
6.Events的代码在哪里?
在config/gateway_worker.php配置信息
下面是events代码
ps:如果开启了gatewayworker,websocket没反应,则是防火墙没开放对应的端口