swoole +websocket 限时通信(聊天功能)

websocket 连接分客户端和服务端,客户端就是客户访问打开的页面,服务端就是服务器文件
首先第步要在项目中安装swoole 拓展,此处不再细说
客户端文件可以话在任何地方 ,电脑桌页面也行,只要能在浏览器打开。文件示例如下:

<html>
<head>
    <meta charset="UTF-8">
    <title>Web sockets test</title>
<script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript">
        var wsServer = 'ws://111.231.231.157:4888'; //服务器地址
        var websocket = new WebSocket(wsServer); //创建WebSocket对象
websocket.onopen = function (evt) {
//已经建立连接  
      $('#send').on('click',function(){
            var msg = $('#msg').val();
            if(msg == '')
            {
                alert('msg can not be null');
                return ;
            }
            var arr =Array();
            arr[0]=6;  //本人id   //每次刷新页面,服务器会生成一个新的id
            arr[1]='小东';
            arr[2]=msg;
            arr[3]=7;   //发给对方的id
            var str = JSON.stringify(arr);
            websocket.send(str);
        });
};

websocket.onclose = function (evt) {
//已经关闭连接
};
websocket.onmessage = function (evt) {
//收到服务器消息,使用evt.data提取\
console.log(evt.data)
};
websocket.onerror = function (evt) {
//产生异常
}; 

function send(){
    $msg = $('#msg').val();
    websocket.send($msg);
}
    
    </script>
</head>
<body>
   <input id="msg" type="text" name="msg">
   <input id="send" type="button" name="" value="发送">
</body>
</html>

服务端,文件可以放在服务器的任何地方,但是上传到服务器后要让php文件运行起来,
在git 中找到文件目录,然后: php websocket.php 即可
文件内容:

<?php
$server = new swoole_websocket_server("0.0.0.0", 4888);

$server->on('open', function ($server, $request) {
   // echo '新用户加入';
    $GLOBALS['fd'][$request->fd]['id']=$request->fd;

    echo 'id='.$request->fd;
    //echo "server: handshake success with fd{$request->fd}\n";
});

$server->on('message', function ($server, $request) {
//$request->fd   //谁发来的
//$request->data   //发来的内容
    $resut = json_decode($request->data);
    $f_d = $resut[1];
    $t_d = $resut[3];
         $server->push($t_d,$f_d.'对你说:'.$resut[2]);  //主动发送给$t_d
});

$server->on('close', function ($server, $fd) {
    echo "client {$fd} closed\n";
    unset($GLOBALS['fd'][$fd]);
});

$server->start();

实现方法,在浏览器上打开两个客户端文件窗口,然后发送给对应 的id,另一个窗口就能收到信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值