https://github.com/jackchang1025/bbin-websocket-client
一个基于 Hyperf WebSocket Client 的 BBIN WebSocket 客户端,支持事件驱动、消息解析、心跳处理与简单投注消息封装
https://github.com/jackchang1025/bbin-websocket-client
baccarat bbin websocket
Last synced: 5 months ago
JSON representation
一个基于 Hyperf WebSocket Client 的 BBIN WebSocket 客户端,支持事件驱动、消息解析、心跳处理与简单投注消息封装
- Host: GitHub
- URL: https://github.com/jackchang1025/bbin-websocket-client
- Owner: jackchang1025
- Created: 2025-08-28T10:05:49.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-08-28T10:05:53.000Z (10 months ago)
- Last Synced: 2025-08-28T16:41:09.242Z (10 months ago)
- Topics: baccarat, bbin, websocket
- Language: PHP
- Homepage:
- Size: 38.1 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
BBIN WebSocket Client(PHP)
一个基于 Hyperf WebSocket Client 的 BBIN WebSocket 客户端,支持事件驱动、消息解析、心跳处理与简单投注消息封装。
- 命名空间:`Weijiajia\\BbinWebSocketClient`
- 运行时依赖:`ext-swoole` (>=5.0)
- PHP 版本:>= 8.2
安装
```bash
composer require weijiajia/bbin-websocket-client
```
开发环境若暂时没有安装 Swoole,可在安装阶段忽略平台要求,但运行时仍需在具备 Swoole 的环境中执行:
```bash
composer install --ignore-platform-req=ext-swoole
```
推荐在 Docker 中使用官方 Swoole 运行时执行示例/测试:
```bash
docker run --rm -it -v $PWD:/app -w /app --network host swoole/swoole:php8.3 php -v
```
快速开始
```php
onOpen(function (WebsocketClient $client) {
echo "websocket connect success\n";
});
$client->onMessage(function (WebsocketClient $client, WebsocketMessage $message) {
// 全量消息广播
});
$client->onPing(function (WebsocketClient $client, WebsocketMessage $message) {
// 按协议回 pong(示例协议为原样发回)
$client->push($message->data());
});
$client->on('ready', function (WebsocketClient $client) {
$client->push([
'lang' => 'cn',
'vType' => 'wss',
'site' => '1',
'sid' => 'REPLACE_ME',
'action' => 'hallLogin',
]);
});
$client->on('onHallLogin', function (WebsocketClient $client) {
$client->push([
'dev' => [
'rd' => 'fx', 'ua' => 'UA', 'os' => 'Windows 10', 'dpr' => 1, 'pl' => 'H5',
],
'lang' => 'cn', 'vType' => 'wss', 'vtMode' => true,
'subscription' => ['example'],
'action' => 'login',
'sid' => 'REPLACE_ME',
]);
});
$client->on('onUpdateGameInfo', function (WebsocketClient $client, WebsocketMessage $message) {
$message->gameInfo()->each(function (LotteryResult $lotteryResult) {
echo $lotteryResult->getDeckNumber() . PHP_EOL;
});
$bet = new BetMessage();
$bet->betBanker(20);
$bet->gameCode = '57';
$bet->gameType = '3001';
$bet->roundSerial = 643386079;
$bet->sid = 'REPLACE_ME';
$client->bet($bet);
});
$client->on('onBet', function (WebsocketClient $client, WebsocketMessage $message) {
var_dump($message->data());
});
$client->onError(function (WebsocketClient $client, \\Throwable $e) {
var_dump($e->getMessage());
});
$client->onClose(function () {
echo "websocket close\n";
});
$client->start();
```
事件模型
- 通用事件:`on(string $event, callable $callback)`
- 语义化事件:`onOpen` / `onMessage` / `onPing` / `onError` / `onClose`
API 说明
WebsocketClient
- `__construct(string $host, array $headers = [])`
- `start(): void`、`stop(): void`、`close(): void`
- `push(array $data, int $opcode = WEBSOCKET_OPCODE_TEXT, ?int $flags = null): bool`
- `bet(BetMessage $betMessage): bool`
WebsocketMessage
- `static fromPayload(string $payload): self`
- `data(): array`、`isPing(): bool`、`action(): ?string`
- `assertNoProtocolError(): void`
- `gameInfo(): Collection`
LotteryResult(部分)
- `getDeckNumber()`、`getLastDeckNumber()`、`getNumber()`
- `getTransformationResult()`、`checkLotteryResults()`
BetMessage
- `betBanker(int $amount)` / `betPlayer(int $amount)`(最低 20)
- 设置 `gameType`, `gameCode`, `roundSerial`, `sid`
- `data(): array`
运行与示例
```bash
php src/example/WebsocketClient.php
```
在 Docker 中运行示例:
```bash
docker run --rm -it -v $PWD:/app -w /app --network host \
swoole/swoole:php8.3 php src/example/WebsocketClient.php
```
测试
```bash
composer install -n --prefer-dist
vendor/bin/pest --exclude-group=integration
vendor/bin/pest --group=integration
```
常见问题
- `Class "Swoole\\Coroutine\\Http\\Client" not found`:缺少 `ext-swoole`
- `连接失败: ...` 后跟 `websocket close`:检查 host 与网络
- JSON 解码异常:查看 `error` 事件输出
许可证:MIT