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