websocket開發
A. 怎樣用java web和websocket實現網頁即時通訊
java 後台做 websocket 服務端。 頁面使用js的websocket客戶端 連接上 服務端 就能實時通信了。
B. websocket 什麼語言比較好
在瀏覽器中通過http僅能實現單向的通信,comet可以一定程度上模擬雙向通信,但效率較低,並需要伺服器有較好的支持; flash中的socket和xmlsocket可以實現真正的雙向通信,通過 flex ajax bridge,可以在javascript中使用這兩項功能. 可以預見,如果websocket一旦在瀏覽器中得到實現,將會替代上面兩項技術,得到廣泛的使用.面對這種狀況,html5定義了WebSocket協議,能更好的節省伺服器資源和帶寬並達到實時通訊。
在JavaEE7中也實現了WebSocket協議。
C. 基於websocket服務端開發框架有哪些
現在包括Netty, Undertow, Jetty, Spray-websocket, Vert.x, Grizzly 和 Node.js 七種框架
D. 如何開發部署websocket端點
第一步——擴展javax.websocket.Endpoint類;
注意事項:
客戶端以及伺服器端的config對象只能為等同於(編程式)對象的@ServerEndpoint以及@ClientEndpoint注釋元素(例如值、編碼器、解碼器以及配置器等等)。
E. 請問各位大大,python如何編寫websocket的服務端和客戶端,wss的那種
自己開發websocket的服務端和客戶端不是不可以,就是短時間內難以做出來穩定性高的服務。
如果真要自己開發也不是不行,python下可以用的websocket或者channels來開發websocket,具體如何實現你網路一下就有很多教程了。
不過如果是在商業項目中運用的話,穩定性、高並發性是需要著重考慮的,可以嘗試下第三方的websocket推送服務的。
我們項目現在集成的是【GoEasy】websocket推送,目前使用良好,穩定性這些都不錯。
F. 如何開發websocket api
WebSocket是HTML5開始提供的一種瀏覽器與伺服器間進行全雙工通訊的網路技術。在WebSocket API中,瀏覽器和伺服器只需要做一個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以數據互相傳送。
Cocos2d-x引擎集成libwebsockets,並在libwebsockets的客戶端API基礎上封裝了一層易用的介面,使得引擎在C++, JS, Lua層都能方便的使用WebSocket來進行游戲網路通訊。
文章很長,給你一個鏈接:
【cocos2d-x教程】如何使用WebSocket_網路經驗
http://jingyan..com/article/c33e3f48ae9158ea14cbb562.html
G. c#的webSocket編程
.net4.5新增的對websockets伺服器支持是在HttpListener類里實現的,獲取WebSocket例子:
varlistener=newHttpListener();
listener.Prefixes.Add("http://*:8080/");
listener.Start();
varcontext=awaitlistener.GetContextAsync();
varwsContext=awaitcontext.AcceptWebSocketAsync(null);
varws=wsContext.WebSocket;
客戶端
varws=newClientWebSocket();
awaitws.ConnectAsync(newUri("ws://127.0.0.1:8080"),CancellationToken.None);
H. 如何搭建 websocket伺服器
其實,在伺服器的選擇上很廣,基本上,主流語言都有WebSocket的伺服器端實現,而我們作為前端開發工程師,當然要選擇現在比較火熱的NodeJS作為我們的伺服器端環境了。
NodeJS本身並沒有原生的WebSocket支持,但是有第三方的實現(大家要是有興趣的話,完全可以參考WebSocket協議來做自己的實現),我們選擇了「ws」作為我們的伺服器端實現。
由於本文的重點是講解WebSocket,所以,對於NodeJS不做過多的介紹,不太熟悉的朋友可以去參考NodeJS入門指南(http://www.nodebeginner.org/index-zh-cn.html)。
安裝好NodeJS之後,我們需要安裝「ws」,也就是我們的WebSocket實現,安裝方法很簡單,在終端或者命令行中輸入:
npm install ws
,等待安裝完成就可以了。
接下來,我們需要啟動我們的WebSocket服務。首先,我們需要構建自己的HTTP伺服器,在NodeJS中構建一個簡單的HTTP伺服器很簡單,so easy。代碼如下:
var app = http.createServer(onRequest ).listen( 8888 );
onRequest()作為回調函數,它的作用是處理請求,然後做出響應,實際上就是根據接收的URL,在伺服器上查找相應的資源,最終返回給瀏覽器。
在構建了HTTP伺服器後,我們需要啟動WebSocket服務,代碼如下:
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer( { server : app } );
從代碼中可以看出,在初始化WebSocket服務時,把我們剛才構建好的HTTP實例傳遞進去就好。到這里,我們的服務端代碼差不多也就編寫完成了。怎麼樣?很簡單吧。
望點贊!
I. websocket 後端怎麼編程
WebSocket的出現是基於Web應用的實時性需要而產生的。這種實時的Web應用大家應該不陌生,在生活中都應該用到過,比如新浪微博的評論、私信的通知,騰訊的WebQQ等。讓我們來回顧下實時 Web 應用的窘境吧。
在WebSocket出現之前,一般通過兩種方式來實現Web實時用:輪詢機制和流技術;其中輪詢有不同的輪詢,還有一種叫Comet的長輪詢。
輪詢:這是最早的一種實現實時 Web 應用的方案。客戶端以一定的時間間隔向服務端發出請求,以頻繁請求的方式來保持客戶端和伺服器端的同步。這種同步方案的缺點是,當客戶端以固定頻率向服務 器發起請求的時候,伺服器端的數據可能並沒有更新,這樣會帶來很多無謂的網路傳輸,所以這是一種非常低效的實時方案。
長輪詢:是對定時輪詢的改進和提高,目地是為了降低無效的網路傳輸。當伺服器端沒有數據更新的時候,連接會保持一段時間周期直到數據或狀態改變或者 時間過期,通過這種機制來減少無效的客戶端和伺服器間的交互。當然,如果服務端的數據變更非常頻繁的話,這種機制和定時輪詢比較起來沒有本質上的性能的提 高。
流:常就是在客戶端的頁面使用一個隱藏的窗口向服務端發出一個長連接的請求。伺服器端接到這個請求後作出回應並不斷更新連接狀態以保證客戶端和服務 器端的連接不過期。通過這種機制可以將伺服器端的信息源源不斷地推向客戶端。這種機制在用戶體驗上有一點問題,需要針對不同的瀏覽器設計不同的方案來改進 用戶體驗,同時這種機制在並發比較大的情況下,對伺服器端的資源是一個極大的考驗。
上述方式其實並不是真正的實時技術,只是使用了一種技巧來實現的模擬實時。在每次客戶端和伺服器端交互的時候都是一次 HTTP 的請求和應答的過程,而每一次的 HTTP 請求和應答都帶有完整的 HTTP 頭信息,這就增加了每次傳輸的數據量。但這些方式最痛苦的是開發人員,因為不論客戶端還是伺服器端的實現都很復雜,為了模擬比較真實的實時效果,開發人員 往往需要構造兩個HTTP連接來模擬客戶端和伺服器之間的雙向通訊,一個連接用來處理客戶端到伺服器端的數據傳輸,一個連接用來處理伺服器端到客戶端的數 據傳輸,這不可避免地增加了編程實現的復雜度,也增加了伺服器端的負載,制約了應用系統的擴展性。
基於上述弊端,實現Web實時應用的技術出現了,WebSocket通過瀏覽器提供的API真正實現了具備像C/S架構下的桌面系統的實時通訊能 力。其原理是使用JavaScript調用瀏覽器的API發出一個WebSocket請求至伺服器,經過一次握手,和伺服器建立了TCP通訊,因為它本質 上是一個TCP連接,所以數據傳輸的穩定性強和數據傳輸量比較小。
WebSocket 協議
WebSocket 協議本質上是一個基於 TCP 的協議。為了建立一個 WebSocket 連接,客戶端瀏覽器首先要向伺服器發起一個 HTTP 請求,這個請求和通常的 HTTP 請求不同,包含了一些附加頭信息,其中附加頭信息」Upgrade: WebSocket」表明這是一個申請協議升級的 HTTP 請求,伺服器端解析這些附加的頭信息然後產生應答信息返回給客戶端,客戶端和伺服器端的 WebSocket 連接就建立起來了,雙方就可以通過這個連接通道自由的傳遞信息,並且這個連接會持續存在直到客戶端或者伺服器端的某一方主動的關閉連接。
下面我們來詳細介紹一下 WebSocket 協議,由於這個協議目前還是處於草案階段,版本的變化比較快,我們選擇目前最新的 draft-ietf-hybi-thewebsocketprotocol-17 版本來描述 WebSocket 協議。因為這個版本目前在一些主流的瀏覽器上比如 Chrome,、FireFox、Opera 上都得到比較好的支持。通過描述可以看到握手協議
客戶端發到伺服器的內容:
代碼如下 復制代碼
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
從伺服器到客戶端的內容:
代碼如下 復制代碼
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
這些請求和通常的 HTTP 請求很相似,但是其中有些內容是和 WebSocket 協議密切相關的。我們需要簡單介紹一下這些請求和應答信息,」Upgrade:WebSocket」表示這是一個特殊的 HTTP 請求,請求的目的就是要將客戶端和伺服器端的通訊協議從 HTTP 協議升級到 WebSocket 協議。其中客戶端的Sec-WebSocket-Key和伺服器端的Sec-WebSocket-Accept就是重要的握手認證信息了,這些內容將在服 務器端實現的博文中講解。
相信通過上文的講解你應該對WebSocket有了個初步認識了,如果有任何疑問歡迎交流。
客戶端
如概念篇中介紹的握手協議,客戶端是由瀏覽器提供了API,所以只要使用JavaScript來簡單調用即可,而伺服器端是要自己實現的,伺服器端將在下個博文來講。
代碼如下 復制代碼
WebSocket JavaScript 介面定義:
[Constructor(in DOMString url, optional in DOMString protocol)]
interface WebSocket {
readonly attribute DOMString URL;
// ready state
const unsigned short CONNECTING = 0;
const unsigned short OPEN = 1;
const unsigned short CLOSED = 2;
readonly attribute unsigned short readyState;
readonly attribute unsigned long bufferedAmount;
// networking
attribute Function onopen;
attribute Function onmessage;
attribute Function onclose;
boolean send(in DOMString data);
void close();
};
WebSocket implements EventTarget;
簡單了解下介面方法和屬性:
readyState表示連接有四種狀態:
CONNECTING (0):表示還沒建立連接;
OPEN (1): 已經建立連接,可以進行通訊;
CLOSING (2):通過關閉握手,正在關閉連接;
CLOSED (3):連接已經關閉或無法打開;
url是代表 WebSocket 伺服器的網路地址,協議通常是」ws」或「wss(加密通信)」,send 方法就是發送數據到伺服器端;
close 方法就是關閉連接;
onopen連接建立,即握手成功觸發的事件;
onmessage收到伺服器消息時觸發的事件;
onerror異常觸發的事件;
onclose關閉連接觸發的事件;
JavaScript調用瀏覽器介面實例如下:
代碼如下 復制代碼
var wsServer = 'ws://localhost:8888/Demo'; //伺服器地址
var websocket = new WebSocket(wsServer); //創建WebSocket對象
websocket.send("hello");//向伺服器發送消息
alert(websocket.readyState);//查看websocket當前狀態
websocket.onopen = function (evt) {
//已經建立連接
};
websocket.onclose = function (evt) {
//已經關閉連接
};
websocket.onmessage = function (evt) {
//收到伺服器消息,使用evt.data提取
};
websocket.onerror = function (evt) {
//產生異常
};