簡易聊天室

<?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>

相關文章
相關標籤/搜索