先命令行建立WsJoin(加入房间) WsLeave(离开房间) RoomTest(房间发送文件)
客户端代码
<html>
<head></head>
<body>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<!-- 接收者<input type="text" id="fid"> -->
<!-- 接收者<input type="text" id="fid"> -->
<button onclick="jaru()">加入房间</button>
<button onclick="likai()">离开房间</button>
发送内容<input type="text" id="content">
<button onclick="roomcall()">发送</button>
<script>ip
var ws = new WebSocket("ws://ip:端口/");
ws.onopen = function () {
console.log('lianjiezhong')
};
ws.onclose = function () {
console.log("lianjieguanbi")
};
ws.onmessage = function (evt) {
// console.log(evt.data)
call_message(evt.data)
};
//处理回调参数
function call_message(data){
//处理回调数据
console.log(data);
var start;
var start_arr = data.indexOf('[');
var start_json = data.indexOf('{');
if(start_arr < 0){
start = start_json;
}
if(start_arr >= 0 && start_json >= 0){
start = Math.min(start_arr,start_json);
}
if(start){
var json = JSON.parse(data.substr(start));
if (json instanceof Array){
window[json[0]](json[1])
}
}
}
//加入房间
function jaru(){
var room = prompt("输入加入房间号");
ws.send(JSON.stringify(['join',{
room:room
}]));
}
//加入房间回调
function joincall(){
console.log(message);
}
//离开房间事件
function likai(){
var room = prompt("请输入离开房间号");
ws.send(JSON.stringify(['leave',{
room:room
}]))
}
//离开房间回调
function leavecall(){
console.log(message);
}
//房间消息发送
function roomcall(){
var room = prompt("请输入发送房间号");
var msg = $("#content").val();
ws.send(JSON.stringify(['RoomTest',{
room:room,
msg:msg
}]));
}
</script>
</body>
</html>
配置文件中增加
加入房间代码
<?php
declare (strict_types = 1);
namespace app\listener;
class WsJoin
{
/**
* 事件监听处理
*
* @return mixed
*/
public function handle($event)
{
$ws = app('think\swoole\Websocket');
// 这块要注意是
//$ws 引入的是 \vendor\topthink\think-swoole\src\Websocket.php
//$room 引入的是 \vendor\topthink\think-swoole\src\websocket\Room.php
//这两块的命名空间不一样 Websocket websocket
//一个是大写 一个是小写 room并不是在大写的Websocket下面
$room = app('think\swoole\websocket\Room');
var_dump($room->getClients($event['room']));
//加入房间
$ws -> join($event['room']);
// 指定客户端加入指定Room、
//$ws->setSender(2)->join($event['room']);
var_dump($room -> getClients($event['room']));
$ws->emit('joincall','加入成功');
}
}
离开房间代码
<?php
declare (strict_types = 1);
namespace app\listener;
class WsLeave
{
/**
* 事件监听处理
*
* @return mixed
*/
public function handle($event)
{
$ws = app('think\swoole\Websocket');
$roomobj = app('think\swoole\websocket\Room');
var_dump($roomobj->getClients($event['room']));
//离开房间
$ws->leave($event['room']);
var_dump($roomobj->getClients($event['room']));
$ws -> emit('leavecall', '离开了房间');
}
}
房间消息发送代码
<?php
declare (strict_types = 1);
namespace app\listener;
class RoomTest
{
/**
* 事件监听处理
*
* @return mixed
*/
public function handle($event)
{
$ws = app('think\swoole\Websocket');
//to 也可以是房间名 现在用的就是房间名
$ws -> to($event['room']) -> emit('roomcall', $event['msg']);
}
}