PHP websocket之聊天室實現

2021-09-13 13:10:06 字數 2394 閱讀 7794

php部分

<?php

error_reporting(e_all);

set_time_limit(0);// 設定超時時間為無限,防止超時

date_default_timezone_set('asia/shanghai');

class websocket catch (\exception $e)

$this->sockets[0] = ['resource' => $this->master];

$pid = posix_getpid();

$this->debug(["server: started,pid: "]);

while (true) catch (\exception $e) }}

private function doserver()

foreach ($sockets as $socket) else

} else else else

}array_unshift($recv_msg, 'receive_msg');

$msg = self::dealmsg($socket, $recv_msg);

$this->broadcast($msg);}}

}/**

* 將socket新增到已連線列表,但握手狀態留空;

** @param $socket

*/public function connect($socket)

/*** 客戶端關閉連線

** @param $socket

** @return array

*/private function disconnect($socket)

/*** 用公共握手演算法握手

** @param $socket

* @param $buffer

** @return bool

*/public function handshake($socket, $buffer)

/*** 解析資料

** @param $buffer

** @return bool|string

*/private function parse($buffer) else if ($len === 127) else

for ($index = 0; $index < strlen($data); $index++)

return json_decode($decoded, true);

}/**

* 將普通資訊組裝成websocket資料幀

** @param $msg

** @return string

*/private function build($msg) else if ($len < 65025) else

$data = '';

$l = strlen($msg);

for ($i = 0; $i < $l; $i++) ));

}$frame[2] = $data;

$data = implode('', $frame);

return pack("h*", $data);

}/**

* 拼裝資訊

** @param $socket

* @param $recv_msg

* [

* 'type'=>user/login

* 'content'=>content

* ]

** @return string

*/private function dealmsg($socket, $recv_msg)

return $this->build(json_encode($response));

}/**

* 廣播訊息

** @param $data

*/private function broadcast($data)

socket_write($socket['resource'], $data, strlen($data));}}

/*** 記錄debug資訊

** @param array $info

*/private function debug(array $info)

/*** 記錄錯誤資訊

** @param array $info

*/private function error(array $info)

}$ws = new websocket("127.0.0.1", "8080");

html部分

0

php websocket搭建簡易聊天室實踐

1 前言 公司遊戲裡面有個簡單的聊天室,了解了之後才知道是node websocket做的,想想php也來做個簡單的聊天室。於是蒐集各種資料看文件 找例項自己也寫了個簡單的聊天室。http連線分為短連線和長連線。短連線一般可以用ajax實現,長連線就是websocket。短連線實現起來比較簡單,但是...

socket之udp聊天器

import socket udp socket socket.socket socket.af inet,socket.sock dgram 注 socket內引數,第一項為固定引數,第二項是選擇建立udp socket還是tcp socket 1.傳送資料udp socket.sendto b ...

小專案之聊天系統步驟

一.建乙個客戶端的視窗 1,在類中寫乙個其他的方法,進而在主方法中呼叫它,物件導向的思想 二.新增textfield和textview用來顯示和傳送資訊 1,frame預設型別為borderlayout,繼承frame的類可以在裡面新增控制項,控制項的 位置可以設定,如 borderlayout.s...