swoole聊天室

Posted php-linux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swoole聊天室相关的知识,希望对你有一定的参考价值。

服务端:

<?php
class Chat

    const HOST = ‘0.0.0.0‘;//ip地址 0.0.0.0代表接受所有ip的访问
    const PART = 8080;//端口号

    private $server = null;//单例存放websocket_server对象

    public function __construct()
    
        //实例化swoole_websocket_server并存储在我们Chat类中的属性上,达到单例的设计
        $this->server = new swoole_websocket_server(self::HOST, self::PART);
        //监听连接事件
        $this->server->on(‘open‘, [$this, ‘onOpen‘]);
        //监听接收消息事件
        $this->server->on(‘message‘, [$this, ‘onMessage‘]);
        //监听关闭事件
        $this->server->on(‘close‘, [$this, ‘onClose‘]);
        //设置允许访问静态文件
        $this->server->set([
            ‘document_root‘ => ‘/www/chat1‘,//这里传入静态文件的目录
            ‘enable_static_handler‘ => true//允许访问静态文件
        ]);


        //开启服务
        $this->server->start();
    

    /**
     * 连接成功回调函数
     * @param $server
     * @param $request
     */
    public function onOpen($server, $request)
    
        echo $request->fd . ‘连接了‘ . PHP_EOL;//打印到我们终端
    

    /**
     * 接收到信息的回调函数
     * @param $server
     * @param $frame
     */
    public function onMessage($server, $frame)
    
        echo $frame->fd . ‘来了,说:‘ . $frame->data . PHP_EOL;//打印到我们终端
        foreach ($server->connections as $fd) //遍历TCP连接迭代器,拿到每个在线的客户端id
            //将客户端发来的消息,推送给所有用户,也可以叫广播给所有在线客户端
            $server->push($fd, json_encode([‘no‘ => $frame->fd, ‘msg‘ => $frame->data]));
        
    

    /**
     * 断开连接回调函数
     * @param $server
     * @param $fd
     */
    public function onClose($server, $fd)
    
        echo $fd . ‘走了‘ . PHP_EOL;//打印到我们终端
    



$obj = new Chat();

  客户端

<!doctype html>

<html>

<head>

    <meta charset="utf-8">

    <title>聊天室</title>

    <script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>

</head>

<body>

<textarea class="log" style="width: 100%; height: 500px;">

=======聊天室======

</textarea>

<input type="button" value="连接" onClick="link()">

<input type="button" value="断开" onClick="dis()">

<input type="text" id="text">

<input type="button" value="发送" onClick="send()">

<script>

    function link()

        var url=‘ws://192.168.33.60:8080‘;

        socket=new WebSocket(url);

        socket.onopen=function()log1(‘连接成功‘)

        socket.onmessage=function(msg)log(msg.data);console.log(msg);

        socket.onclose=function()log1(‘断开连接‘)

    

    function dis()

        socket.close();

        socket=null;

    

    function log1(var1) 
        $(‘.log‘).append(var1+‘\\r\\n‘);
    
    function log(var1)
        var  v=$.parseJSON(var1)
        $(‘.log‘).append(‘用户‘+v[‘no‘]+‘说:‘+v[‘msg‘]+‘\\r\\n‘);
    

    function send()
        var text=$(‘#text‘).val();

        socket.send(text);
    

    function send2()

        var json = JSON.stringify(‘type‘:‘php‘,‘msg‘:$(‘#text2‘).attr(‘value‘))

        socket.send(json);

    

</script>

</body>

</html>

  

服务端 启动

php Chat.php

 

访问客户端的html 浏览器打开

技术图片

 

 

 

参考 https://www.jianshu.com/p/ac77f05bee56

以上是关于swoole聊天室的主要内容,如果未能解决你的问题,请参考以下文章

用swoole和websocket开发简单聊天室

Laravel + Swoole 打造IM简易聊天室

Laravel + Swoole 打造IM简易聊天室

swoole webSocket 聊天室示例

swoole聊天室

用Swoole+React 实现的聊天室