目前項(xiàng)目用戶越來(lái)越多 流量以及帶寬成倍增長(zhǎng) 項(xiàng)目這邊討論一致認(rèn)為 走壓縮方案
但workerman webscoket 不支持 permessage-deflate
所以目前只用了nodejs 做轉(zhuǎn)發(fā)支持 permessage-deflate 轉(zhuǎn)發(fā)意味著性能上不是很友好
項(xiàng)目這邊就評(píng)估 正確做法一開(kāi)始就用nodejs 提供更高的可擴(kuò)展性
感覺(jué)workerman 不增加基礎(chǔ)擴(kuò)展
很難留住大用戶 往往成為過(guò)渡產(chǎn)品 資源都浪費(fèi)了
需要懂得框架底層 輪詢事件機(jī)制 才能二次開(kāi)發(fā) 改不動(dòng)
workerman 4.1分支加了 permessage-deflate 支持,你可以試下,測(cè)試一段時(shí)間沒(méi)問(wèn)題后這邊再發(fā)版本
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Websocket;
use Workerman\Worker;
$worker = new Worker('websocket://127.0.0.1:8080');
$worker->onWebSocketConnect = function ($connection) {
// 告訴瀏覽器服務(wù)端支持 permessage-deflate
$connection->headers = [
'sec-websocket-extensions: permessage-deflate; server_no_context_takeover; client_max_window_bits=15'
];
// 服務(wù)端設(shè)置websocket類(lèi)型為 permessage-deflate,發(fā)送數(shù)據(jù)會(huì)自動(dòng)壓縮
$connection->websocketType = Websocket::BINARY_TYPE_BLOB_DEFLATE;
};
$worker->onMessage = function (TcpConnection $connection, $data)
{
$connection->send('hello');
};
Worker::runAll();
https://www.codenong.com/22169036/
C# websocket-sharp 插件使用壓縮時(shí) 發(fā)現(xiàn)有個(gè)上下文問(wèn)題 第一條消息成功 后面就失敗了
請(qǐng)求頭
Sec-WebSocket-Extensions: permessage-deflate; server_no_context_takeover; client_no_context_takeover; client_max_window_bits=15