websocket web 實現記錄
websocket 原理簡介:
WebSocket protocol 是HTML5一種新的協議(protocol)。它是實現了瀏覽器與伺服器全雙工通訊(full-duplex)。
現很多網站為了實現即時通訊(real-time),所用的技術都是輪詢(polling)。輪詢是在特定的的時間間隔(time interval)(如每1秒),由瀏覽器對伺服器發出HTTP request,然後由伺服器返回最新的資料給客服端的瀏覽器。這種傳統的HTTP request d的模式帶來很明顯的缺點 –
瀏覽器需要不斷的向伺服器發出請求(request),然而HTTP request 的header是非常長的,裡面包含的資料可能只是一個很小的值,這樣會佔用很多的頻寬。
而最比較新的技術去做輪詢的效果是Comet – 用了AJAX。但這種技術雖然可達到全雙工通訊,但依然需要發出請求(reuqest)。
在 WebSocket API,瀏覽器和伺服器只需要要做一個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送。在此WebSocket 協議中,為我們實現即時服務帶來了兩大好處:
1. Header
互相溝通的Header是很小的-大概只有 2 Bytes
2. Server Push
伺服器可以主動傳送資料給客戶端
WebSocket 規範的目標是在瀏覽器中實現和伺服器端雙向通訊。雙向通訊可以擴充瀏覽器上的應用型別,例如實時的資料推送(股票行情)、遊戲、聊天等。
Ajax、Comet與Websocket 三種技術對比
package com.test.websockets;
import java.io.IOException;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/websocket")
public class WebSocketTest {
@OnMessage
public void onMessage(String message, Session session)
throws IOException, InterruptedException {
// Print the client message for testing purposes
System.out.println("Received: " + message);
// Send the first message to the client
session.getBasicRemote().sendText("This is the first server message");
// Send 3 messages to the client every 5 seconds
int sentMessages = 0;
while(sentMessages < 3){
Thread.sleep(5000);
session.getBasicRemote().
sendText("This is an intermediate server message. Count: "
+ sentMessages);
sentMessages++;
}
// Send a final message to the client
session.getBasicRemote().sendText("This is the last server message");
}
@OnOpen
public void onOpen() {
System.out.println("Client connected");
}
@OnClose
public void onClose() {
System.out.println("Connection closed");
}
}
參考資料:
http://www.oschina.net/translate/java-ee-html5-websocket-example
https://www.websocket.org/index.html
http://blog.csdn.net/yl02520/article/details/7298309
相關文章
- 記一次前端使用Websocket實現AI會話時卡頓的bug修復記錄前端WebAI會話
- web頁面錄屏實現Web
- Jmeter BlazeMeter實現web錄製JMeterWeb
- web技術支援| Web 客戶端實現錄音、錄影Web客戶端
- php redis 處理websocket聊天記錄PHPRedisWeb
- 用js實現web端錄屏JSWeb
- WebSocket 服務掛掉問題記錄Web
- OkHttp實現分析之WebsocketHTTPWeb
- WebSocket 實現原理淺析Web
- Tomcat如何實現WebSocketTomcatWeb
- 清除web記錄方法Web
- Rust 實現日誌記錄功能Rust
- 記錄:瀑布流最佳實現方案
- 記錄使用websocket時因為Sec-Websocket-Protocol遇到的一個問題WebProtocol
- websocket學習和群聊實現Web
- angular + express 實現websocket通訊AngularExpressWeb
- SpringBoot 快速實現WebSocketSpring BootWeb
- Flutter websocket 實現訊息推送FlutterWeb
- ngx_lua_websocket server實現WebServer
- 使用Java實現WebSocket通訊JavaWeb
- WebSocket的SSL認證失敗問題記錄Web
- 案例:商品瀏覽記錄的實現
- Easyui datagrid 實現表格記錄拖拽UI
- QQ聊天記錄儲存如何實現?
- coreseek 實現中文全文索引 記錄索引
- Go使用websocket實現彈幕功能GoWeb
- [譯] Go 實現百萬 WebSocket 連線GoWeb
- Django使用Channels實現WebSocket--下篇DjangoWeb
- Django使用Channels實現WebSocket--上篇DjangoWeb
- WebRTC + WebSocket 實現視訊通話Web
- WebSocket實現前後端通訊Web後端
- Django3使用WebSocket實現WebShellDjangoWebshell
- Django使用channels實現Websocket連線DjangoWeb
- php : tp框架swoole實現websocket,wssPHP框架Web
- gin websocket 簡單分散式實現Web分散式
- NodeJS實現websocket代理機制NodeJSWeb
- Websocketd:以Unix方式實現的WebsocketWeb
- websocket和http有什麼不同?以及websocket協議如何實現?WebHTTP協議