简易聊天室

<?php
class Chat
{
const HOST = '0.0.0.0';//ip地址 0.0.0.0表明接受全部ip的访问
const PART = 81;//端口号
private $server = null;//单例存放websocket_server对象
private $connectList = [];//客户端的id集合

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' => '/grx/swoole/public',//这里传入静态文件的目录
// 'enable_static_handler' => true//容许访问静态文件
//]);
//开启服务
$this->server->start();
}

/**
* 链接成功回调函数
* @param $server
* @param $request
*/
public function onOpen($server, $request)
{
echo $request->fd . '链接了' . PHP_EOL;//打印到咱们终端
$this->connectList[] = $request->fd;//将请求对象上的fd,也就是客户端的惟一标识,能够把它理解为客户端id,存入集合中
}php

/**
* 接收到信息的回调函数
* @param $server
* @param $frame
*/
public function onMessage($server, $frame)
{
echo $frame->fd . '来了,说:' . $frame->data . PHP_EOL;//打印到咱们终端
//将这个用户的信息存入集合
foreach ($this->connectList as $fd) {//遍历客户端的集合,拿到每一个在线的客户端id
//将客户端发来的消息,推送给全部用户,也能够叫广播给全部在线客户端
$server->push($fd, json_encode(['no' => $frame->fd, 'msg' => $frame->data]));
}
}html

/**
* 断开链接回调函数
* @param $server
* @param $fd
*/
public function onClose($server, $fd)
{
echo $fd . '走了' . PHP_EOL;//打印到咱们终端
$this->connectList = array_diff($this->connectList, [$fd]);//将断开了的客户端id,清除出集合
}

}jquery

$obj = new Chat();web

 

//HTMLjson

<!doctype html>websocket

<html>swoole

<head>app

<meta charset="utf-8">socket

<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://152.136.130.131:81';

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>

相关文章
相关标签/搜索