swoole简易websocket搭建

最近回顾swoole,突然想试一个,直接上效果图and代码

在这里插入图片描述
swoole代码
用的官方示例改的


```ws.php
<?php

//创建WebSocket Server对象,监听0.0.0.0:9502端口
$ws = new Swoole\WebSocket\Server('0.0.0.0', 9502);

//监听WebSocket连接打开事件
$ws->on('Open', function ($ws, $request) {
    $account = $request->get['account'];
    $fd = $request->fd;
    //直接用文件了,就不去创建数据库了
    $acclist = json_decode(file_get_contents('/home/cyd/swoole/ws/acc.json'),true);
    $acclist[$request->fd] = $account;
    file_put_contents('/home/cyd/swoole/ws/acc.json',json_encode($acclist));
    $ws->push($request->fd, "hello, welcome\n");

});

//监听WebSocket消息事件
$ws->on('Message', function ($ws, $frame) {
    $msg_data = json_decode($frame->data,true);
    //直接用文件了,就不去创建数据库了
    $acclist = json_decode(file_get_contents('/home/cyd/swoole/ws/acc.json'),true);
    $acclist2 = array_flip($acclist);
    if(!$acclist2[$msg_data['to']]){
        $ws->push($frame->fd, "用户不存在");
    }else{
        $ws->push($acclist2[$msg_data['to']], $msg_data['msg']);
    }

});

//监听WebSocket连接关闭事件
$ws->on('Close', function ($ws, $fd) {
    //退出删掉fd标识
    $acclist = json_decode(file_get_contents('/home/cyd/swoole/ws/acc.json'),true);
    unset($acclist[$fd]);
    file_put_contents('/home/cyd/swoole/ws/acc.json',json_encode($acclist));
    echo "client-{$fd} is closed\n";
});

$ws->start();

``HTML代码WS

<html>

<head>

    <title>swoole sockte聊天</title>

</head>

<body>

<div id="room"></div>

<!--<p>你的<input type="text" id="account"/></p>-->

<p>to<input type="text" id="to"/></p>


<p>内容<input type="text" id="msg"/></p>

<p><input type="button" id="send" value="send"/></p>

<script type="text/javascript">

    function $(str){

        return document.getElementById(str);

    }

    // let account = $('account');

    let to = $('to');

    let msg = $('msg');

    let room = $('room');

    let send = $('send');

    let ws = new WebSocket('ws://192.168.0.147:9502'+window.location.search);

    ws.onopen = function(){
        room.innerHTML = 'swoole连接上<br/>';
    }

    ws.onmessage = function(e){
        room.innerHTML += e.data+'<br/>';
    }

    send.onclick = function(){
        
        ws.send(`{"msg":"${msg.value}","to":"${to.value}"}`);

    }
</script>

</body>

</html>

运行

  • php ws.php
  • 打开html文件传值?account=cydxin,直接ws连接的时候把用户传过去

补充

  • 本来很简单的东西,还写了一会,主要是犯病了,定义json的时候,ws.send({“msg”:“ m s g . v a l u e " , " t o " : " {msg.value}","to":" msg.value","to":"{to.value}”});
  • value忘了上双引号,结果导致传数字是没问题的,传字符就噶了,哈哈哈哈
  • 补充完整的地方就是登录了,可以套个登录上cookie,就不用在WS连接上写,swoole里边的话,上个数据库,反正壳子就是这样了,发消息,发给谁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值