WebSocket åè®®æ¯æ
æ¬æä»ç»å¦ä½å¨ Web äºå½æ°ä¸å®ç° WebSocket é¿è¿æ¥ï¼æ¯ææå¡ç«¯ä¸å®¢æ·ç«¯ä¹é´çåå宿¶éä¿¡ã
ä»ä¹æ¯ WebSocketâ
ãWebSocketãæ¯ä¸ç§å¨å个 TCP è¿æ¥ä¸è¿è¡å ¨åå·¥éä¿¡çåè®®ï¼å 许æå¡ç«¯ä¸»å¨å客æ·ç«¯æ¨éæ°æ®ãä¸ä¼ ç»ç HTTP 请æ±-ååºæ¨¡å¼ä¸åï¼WebSocket 建ç«è¿æ¥åå¯ä»¥ä¿æé¿è¿æ¥ï¼å®ç°æå¡ç«¯å客æ·ç«¯ä¹é´ç宿¶ååæ°æ®ä¼ è¾ã
主è¦ç¹ç¹ï¼
- å ¨åå·¥éä¿¡ï¼æå¡ç«¯åå®¢æ· ç«¯å¯ä»¥åæ¶åéåæ¥æ¶æ¶æ¯
- æä¹ è¿æ¥ï¼å»ºç«è¿æ¥åä¿æé¿è¿æ¥ï¼æ éé夿¡æ
- ä½å»¶è¿ï¼æ¶æ¯ä¼ é宿¶é«æï¼éå宿¶åºç¨åºæ¯
- åè®®åæ¢ï¼éè¿ HTTP Upgrade æºå¶ä» HTTP åè®®å级为 WebSocket åè®®
å ¸ååºç¨åºæ¯ï¼
- 宿¶è天åºç¨
- å¨çº¿åä½ç¼è¾
- 宿¶æ°æ®çæ§
- 游ææå¡å¨
- 宿¶éç¥æ¨é
å·¥ä½åçâ
æå¡å¯å¨â
卿¯æ WebSocket ç Web äºå½æ°ä¸ï¼éè¿å¯å¨æä»¶å¯å¨ WebSocket æå¡å¨ï¼æå¡å¨å¿ é¡»å¨ 9000 ç«¯å£ ä¸çå¬ã
建ç«è¿æ¥â
- 客æ·ç«¯éè¿
ws://æwss://åè®®åäºå½æ°åèµ·è¿æ¥è¯·æ± - äºå½æ°å¹³å°å°è¿æ¥éä¼ ç»è¿è¡ç¯å¢ä¸ç WebSocket æå¡è¿ç¨ï¼9000 端å£ï¼
- è¿æ¥ååååç»éä¿¡å®å ¨ç±æ¨ç WebSocket æå¡ç«¯ä»£ç å¤ç
è¿æ¥çå½å¨æâ
- è¿æ¥ä¸å®ä¾æ å°ï¼ä¸æ¬¡ WebSocket è¿æ¥ççå½å¨æçåäºä¸æ¬¡å½æ°è°ç¨è¯·æ±
- è¿æ¥å»ºç« = 请æ±åèµ·
- è¿æ¥æå¼ = 请æ±ç»æ
- å®ä¾æ å°ï¼å½æ°å®ä¾ä¸è¿æ¥æ¯ä¸ä¸å¯¹åºçï¼åä¸å®ä¾å¨æä¸æ¶å»ä» å¤çä¸ä¸ª WebSocket è¿æ¥ï¼æ°è¿æ¥ä¼å¯å¨æ°çå®ä¾
- è¿æ¥ä¿æï¼è¿æ¥å»ºç«åï¼å®ä¾æç»è¿è¡ï¼å¤çååæ°æ®ä¼ è¾
- è¿æ¥ç»æï¼å½ WebSocket è¿æ¥æå¼æ¶ï¼å¯¹åºç彿°å®ä¾åæ¢è¿è¡
使ç¨éå¶â
å¨ä½¿ç¨ WebSocket æ¶ï¼éè¦æ³¨æä»¥ä¸é é¢éå¶ï¼
| éå¶é¡¹ | 说æ |
|---|---|
| 空é²è¶ æ¶æ¶é´ | 10 ~ 7200 ç§ï¼è¿æ¥ä¸æ æ¶æ¯ä¼ è¾æ¶çè¶ æ¶æ¶é´ |
| æ§è¡è¶ æ¶æ¶é´ | å¿ é¡» ⥠空é²è¶ æ¶æ¶é´ï¼å½æ°çæå¤§è¿è¡æ¶é¿ |
| 忬¡æ¶æ¯å¤§å° | æå¤§ 256KB |
| åè¿æ¥ä¼ è¾éç | æå¤§ 128KB/s |
| åè¿æ¥è¯·æ± QPS | æå¤§ 10 次/ç§ |
è¿æ¥æå¼ä¸ç¶æç â
ä¸åçæå¼æ åµå¯¹åºä¸åç彿°ç¶æç ï¼
| æå¼æ åµ | 彿°è¡¨ç° | 彿°ç¶æç |
|---|---|---|
| æ£å¸¸å
³é ç¶æç 为 1000ã1010ã1011 | 彿°æ£ 常æ§è¡ç»æ | 200 |
| å¼å¸¸å
³é éæ åå ³éç¶æç | 彿°å¼å¸¸ç»æ | 439 (æå¡ç«¯å
³é) 456 (客æ·ç«¯å ³é) |
| 空é²è¶
æ¶ è¿æ¥æ æ¶æ¯ä¼ è¾è¶ è¿é ç½®æ¶é´ | 彿°å¼å¸¸ç»æ | 455 |
| æ§è¡è¶
æ¶ è¿æ¥æç»æ¶é´è¶ è¿å½æ°æå¤§è¿è¡æ¶é¿ | 彿°å¼å¸¸ç»æ | 433 |
æä½æ¥éª¤â
æ¥éª¤1ï¼å¼å¯ WebSocket åè®®æ¯æâ
å¨å建æç¼è¾äºå½æ°æ¶ï¼éè¦å¨æ§å¶å°å¼å¯ WebSocket åè®®æ¯æã
- ç»å½ äºå¼åå¹³å°/äºå½æ°/彿°å表
- ç¹å»ãæ°å»ºäºå½æ°ãæéæ©å·²æå½æ°ç¹å»ãç¼è¾ã
- å¨ã彿°é ç½®ã䏿¾å°ãWebSocket åè®®ãé 置项

- å¼å¯ãWebSocket åè®®ãå¼å ³
- 设置ãWebSocket 空é²è¶ æ¶æ¶é´ãï¼èå´ï¼10-7200 ç§ï¼
- ç¡®ä¿ãæ§è¡è¶ æ¶æ¶é´ãâ¥ã空é²è¶ æ¶æ¶é´ã
- ç¹å»ãä¿åã宿é ç½®
â ï¸ æ³¨æï¼WebSocket åè®®ä¸æ¦å¼å¯åä¸å¯åæ¶ï¼ä½ç©ºé²è¶ æ¶æ¶é´å¯ä»¥åç»ä¿®æ¹ã
æ¥éª¤2ï¼å®è£ ä¾èµå¹¶ç¼åæå¡ç«¯ä»£ç â
æ ¹æ®æ¨ä½¿ç¨çç¼ç¨è¯è¨ï¼å®è£ 对åºç WebSocket åºå¹¶ç¼åæå¡ç«¯ä»£ç ãWebSocket æå¡å¨å¿ é¡»çå¬ 9000 端å£ã
- Node.js
- Python
å®è£ ä¾èµ
å®è£
ws åºï¼
npm install ws
å¨ package.json 䏿·»å ä¾èµï¼
{
"dependencies": {
"ws": "^8.0.0"
}
}
ç¼åæå¡ç«¯ä»£ç
ä½¿ç¨ ws åºå®ç° WebSocket æå¡å¨ï¼
const WebSocket = require('ws');
// å建 WebSocket æå¡å¨ï¼å¿
é¡»çå¬ 9000 端å£
const wss = new WebSocket.Server({ port: 9000 });
wss.on('connection', (ws) => {
console.log('æ°è¿æ¥å»ºç«');
// å鿬¢è¿æ¶æ¯
ws.send('欢è¿è¿æ¥å° WebSocket æå¡');
// æ¥æ¶æ¶æ¯
ws.on('message', (message) => {
console.log('æ¶å°æ¶æ¯:', message.toString());
// å夿¶æ¯
const response = {
type: 'response',
data: message.toString(),
timestamp: Date.now(),
};
ws.send(JSON.stringify(response));
});
// è¿æ¥å
³é
ws.on('close', () => {
console.log('è¿æ¥å·²å
³é');
});
// é误å¤ç
ws.on('error', (error) => {
console.error('WebSocket é误:', error);
});
});
console.log('WebSocket æå¡å¨å·²å¯å¨ï¼çå¬ç«¯å£ 9000');
å®è£ ä¾èµ
å¨ requirements.txt 䏿·»å websockets åºï¼
websockets
ç¼åæå¡ç«¯ä»£ç
ä½¿ç¨ websockets åºå®ç° WebSocket æå¡å¨ï¼
import asyncio
import websockets
import json
from datetime import datetime
async def handle_connection(websocket, path):
"""å¤ç WebSocket è¿æ¥"""
try:
# å鿬¢è¿æ¶æ¯
await websocket.send("欢è¿è¿æ¥å° WebSocket æå¡")
# æç»æ¥æ¶æ¶æ¯
async for message in websocket:
print(f"æ¶å°æ¶æ¯: {message}")
# å夿¶æ¯
response = {
"type": "response",
"data": message,
"timestamp": datetime.now().isoformat()
}
await websocket.send(json.dumps(response))
except websockets.exceptions.ConnectionClosed:
print("è¿æ¥å·²å
³é")
except Exception as e:
print(f"é误: {e}")
# å¯å¨ WebSocket æå¡
async def main():
# å¿
é¡»çå¬ 9000 端å£
async with websockets.serve(handle_connection, "0.0.0.0", 9000):
await asyncio.Future() # ä¿æè¿è¡
if __name__ == "__main__":
asyncio.run(main())
æ¥éª¤3ï¼é¨ç½²äºå½æ°â
宿代ç ç¼ååï¼é¨ç½²äºå½æ°ï¼
- 卿§å¶å°ç¹å»ãé¨ç½²ãæé®
- æä½¿ç¨ CloudBase CLIï¼
tcb fn deploy --httpFn
æ¥éª¤4ï¼å®¢æ·ç«¯è¿æ¥æµè¯â
ä½¿ç¨æµè§å¨æ Node.js 客æ·ç«¯è¿æ¥ WebSocket æå¡ï¼
// æµè§å¨ç«¯
const ws = new WebSocket('wss://your-function.run.tcloudbase.com');
ws.onopen = () => {
console.log('è¿æ¥å·²å»ºç«');
ws.send('Hello, server!');
};
ws.onmessage = (event) => {
console.log('æ¶å°æ¶æ¯:', event.data);
};
ws.onclose = () => {
console.log('è¿æ¥å·²å
³é');
};
ws.onerror = (error) => {
console.error('WebSocket é误:', error);
};