锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲色偷偷综合亚洲AV伊人蜜桃 ,国产偷国产偷亚洲清高APP,亚洲熟女少妇一区二区http://www.tkk7.com/qbna350816/category/55091.html201103zh-cnSat, 23 Jul 2016 17:39:01 GMTSat, 23 Jul 2016 17:39:01 GMT60JSR 356- WebSocket Java API http://www.tkk7.com/qbna350816/archive/2016/07/24/431302.html鑳″皬鍐?/dc:creator>鑳″皬鍐?/author>Sat, 23 Jul 2016 17:35:00 GMThttp://www.tkk7.com/qbna350816/archive/2016/07/24/431302.htmlhttp://www.tkk7.com/qbna350816/comments/431302.htmlhttp://www.tkk7.com/qbna350816/archive/2016/07/24/431302.html#Feedback0http://www.tkk7.com/qbna350816/comments/commentRss/431302.htmlhttp://www.tkk7.com/qbna350816/services/trackbacks/431302.html鍘熸枃錛?a style="cursor: pointer;">http://www.oracle.com/technetwork/articles/java/jsr356-1937161.html

瀛︿範濡備綍鍦ㄤ綘鐨勫簲鐢ㄧ▼搴忎腑闆嗘垚WebSockets.

Published April 2013

瀵逛簬璁稿鍩轟簬瀹㈡埛绔紞鏈嶅姟鍣ㄧ▼搴忔潵璇達紝鑰佺殑HTTP 璇鋒眰-鍝嶅簲妯″瀷宸茬粡鏈夊畠鐨勫眬闄愭? 淇℃伅蹇呴』閫氳繃澶氭璇鋒眰鎵嶈兘灝嗗叾浠庢湇鍔$浼犻佸埌瀹㈡埛绔?

榪囧幓璁稿鐨勯粦瀹嬌鐢ㄦ煇浜涙妧鏈潵緇曡繃榪欎釜闂錛屼緥濡傦細闀胯疆璇?long polling)銆?span style="color: #333333;">鍩轟簬 HTTP 闀胯繛鎺ョ殑鏈嶅姟鍣ㄦ帹鎶鏈?Comet)

鐒惰岋紝鍩轟簬鏍囧噯鐨勩佸弻鍚戠殑銆佸鎴風鍜屾湇鍔″櫒涔嬮棿鍏ㄥ弻宸ョ殑淇¢亾闇姹傚啀涓嶆柇澧炲姞銆?/div>

鍦?011騫? IETF鍙戝竷浜嗘爣鍑哤ebSocket鍗忚錛峈FC 6455. 浠庨偅鏃惰搗錛屽ぇ澶氭暟Web嫻忚鍣ㄩ兘瀹炵幇浜嗘敮鎸乄ebSocket鍗忚鐨勫鎴風APIs.鍚屾椂錛岃澶欽ava 鍖呬篃寮濮嬪疄鐜頒簡WebSocket鍗忚.

WebSocket鍗忚鍒╃敤HTTP鍗囩駭鎶鏈潵灝咹TTP榪炴帴鍗囩駭鍒癢ebSocket. 涓鏃﹀崌綰у悗錛岃繛鎺ュ氨鏈変簡鍦ㄤ袱涓柟鍚戜笂鐩鎬簰鐙珛(鍏ㄥ弻寮?鍙戦佹秷鎭?鏁版嵁妗?鐨勮兘鍔? 

涓嶉渶瑕乭eaders 鎴朿ookies,榪欏ぇ澶ч檷浣庝簡鎵闇鐨勫甫瀹?/span>閫氬父錛學ebSockets鏉ュ懆鏈熸у湴鍙戦佸皬娑堟伅 (渚嬪錛屽嚑涓瓧鑺?. 

棰濆鐨?span style="font-family: 'Microsoft Yahei';">headers甯稿父浼氫嬌寮閿澶т簬鏈夋晥璐熻澆錛?span style="font-family: 'Microsoft Yahei';">payload錛夈?/div>

JSR 356

JSR 356, WebSocket鐨凧ava API, 鏄庣‘瑙勫畾浜咥PI錛屽綋Java寮鍙戣呴渶瑕佸湪搴旂敤紼嬪簭涓泦鎴怶ebSocket鏃訛紝灝卞彲浠ヤ嬌鐢ㄦAPI—鏈嶅姟绔拰瀹㈡埛绔潎鍙? 姣忎釜澹版槑鍏煎JSR 356鐨刉ebSocket鍗忚錛岄兘蹇呴』瀹炵幇榪欎釜API. 

鍥犳錛屽紑鍙戜漢鍛樺彲浠ヨ嚜宸辯紪鍐欑嫭绔嬩簬搴曞眰WebSocket瀹炵幇鐨刉ebSocket搴旂敤銆?/span>榪欐槸涓涓法澶х殑濂藉錛屽洜涓哄畠鍙互闃叉渚涘簲鍟嗛攣瀹氾紝騫跺厑璁告洿澶氱殑閫夋嫨銆佽嚜鐢辯殑搴撱佸簲鐢ㄧ▼搴忔湇鍔″櫒銆?/span>

JSR 356鏄嵆灝嗗埌鏉ョ殑java EE 7鏍囧噯鐨勪竴閮ㄥ垎錛屽洜姝わ紝鎵鏈変笌Java EE 7鍏煎鐨勫簲鐢ㄦ湇鍔″櫒閮芥湁JSR 365鏍囧噯WebSocket鐨勫疄鐜?涓鏃﹀緩绔嬶紝WebSocket瀹㈡埛绔拰鏈嶅姟鍣ㄨ妭鐐瑰凡緇忔槸瀵圭О鐨勪簡銆傚鎴風API涓庢湇鍔″櫒绔疉PI鐨勫尯鍒槸寰堝皬鐨勶紝JSR 356瀹氫箟鐨凧ava client API鍙槸Java EE7瀹屾暣API鐨勫瓙闆?

瀹㈡埛孌碉紞鏈嶅姟鍣ㄧ紼嬪簭浣跨敤WebSockets錛岄氬父浼氬寘鍚竴涓湇鍔″櫒緇勪歡鍜屽涓鎴風緇勪歡, 濡傚浘錛戞墍紺?

Figure 1

鍥?

鍦ㄨ繖涓緥瀛愪腑錛宻erver application 鏄氳繃Java緙栧啓鐨?WebSocket 鍗忚緇嗚妭鏄敱鍖呭惈鍦↗ava EE 7瀹瑰櫒涓璊SR 356 瀹炵幇鏉ュ鐞嗙殑.

JavaFX 瀹㈡埛绔彲渚濊禆浠諱綍涓嶫SR 356鍏煎鐨勫鎴風瀹炵幇鏉ュ鐞哤ebSocket鍗忚闂. 

鍏跺畠瀹㈡埛绔?濡?iOS 瀹㈡埛绔拰HTML5瀹㈡埛绔?鍙嬌鐢ㄥ叾瀹?(闈濲ava)涓嶳FC6455鍏煎鐨勫疄鐜版潵涓巗erver application閫氫俊.

緙栫▼妯″瀷

JSR 356瀹氫箟鐨勪笓瀹跺皬緇?甯屾湜鏀寔Java EE寮鍙戜漢鍛樺父鐢ㄧ殑妯″紡鍜屾妧鏈?/span>鍥犳,JSR 356浣跨敤浜嗘敞閲婂拰娉ㄥ叆銆?/span>

涓鑸潵璇達紝鏀寔涓ょ緙栫▼妯″瀷:

  • 娉ㄨВ椹卞姩(annotation-driven). 閫氳繃浣跨敤娉ㄨВPOJOs, 寮鍙戣呭彲涓嶹ebSocket鐢熷懡鍛ㄦ湡浜嬩歡浜や簰.
  • 鎺ュ彛椹卞姩(interface-driven). 寮鍙戣呭彲瀹炵幇Endpoint鎺ュ彛鍜屼笌鐢熷懡鍛ㄦ湡浜や簰鐨勬柟娉?

鐢熷懡鍛ㄦ湡浜嬩歡

鍏稿瀷鐨刉ebSocket 浜や簰鐢熷懡鍛ㄦ湡濡備笅:

  • 涓绔?(瀹㈡埛绔? 閫氳繃鍙戦丠TTP鎻℃墜璇鋒眰鏉ュ垵濮嬪寲榪炴帴.
  • 鍏跺畠绔?鏈嶅姟绔? 鍥炲鎻℃墜鍝嶅簲.
  • 寤虹珛榪炴帴.浠庣幇鍦ㄥ紑濮嬶紝榪炴帴鏄畬鍏ㄥ縐扮殑.
  • 涓ょ閮藉彲鍙戦佸拰鎺ユ敹娑堟伅.
  • 鍏朵腑涓绔叧闂繛鎺?

澶ч儴鍒哤ebSocket鐢熷懡鍛ㄦ湡浜嬩歡閮戒笌Java鏂規硶瀵瑰簲錛屼笉綆℃槸 annotation-driven 榪樻槸interface-driven.

Annotation-Driven 鏂瑰紡

鎺ュ彈WebSocket璇鋒眰鐨勭鐐瑰彲浠ユ槸浠?nbsp;@ServerEndpoint 娉ㄨВ鐨凱OJO. 

姝ゆ敞瑙e憡鐭ュ鍣紝姝ょ被搴旇琚涓烘槸WebSocket绔偣. 

蹇呴』鐨?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; color: #666666; background-color: inherit;">value 鍏冪礌鎸囧畾浜哤ebSocket绔偣鐨勮礬寰?

鑰冭檻涓嬮潰鐨勪唬鐮佺墖鏂?

@ServerEndpoint("/hello")  public class MyEndpoint { } 

姝や唬鐮佸皢浼氫互鐩稿璺緞hello鏉ュ彂甯冧竴涓鐐?鍦ㄥ悗緇柟娉曡皟鐢ㄤ腑錛屾璺緞鍙惡甯﹁礬寰勫弬鏁幫紝濡傦細 /hello/{userid}鏄竴涓湁鏁堣礬寰勶紝鍦ㄨ繖閲?/code>{userid} 鐨勫鹼紝鍙湪鐢熷懡鍛ㄦ湡鏂規硶浣跨敤@PathParam 娉ㄨВ鑾峰彇.

鍦℅lassFish涓紝濡傛灉浣犵殑搴旂敤紼嬪簭鏄敤涓婁笅鏂?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; color: #666666; background-color: inherit;">mycontextroot 閮ㄧ講鐨勶紝涓斿湪localhost鐨?span style="color: #000000; font-family: 'Microsoft Yahei';">8080绔彛涓婄洃鍚?/span>, WebSocket鍙氳繃浣跨敤ws://localhost:8080/mycontextroot/hello鏉ヨ闂?/code>.

鍒濆鍖朩ebSocket榪炴帴鐨勭鐐瑰彲浠ユ槸浠?nbsp;@ClientEndpoint 娉ㄨВ鐨凱OJO.@ClientEndpoint 鍜?@ServerEndpoint鐨勪富瑕佸尯鍒槸ClientEndpoint 涓嶆帴鍙楄礬寰勮礬鍊煎厓绱狅紝鍥犱負瀹冪洃鍚繘鏉ョ殑璇鋒眰銆?/p>

@ClientEndpoint  public class MyClientEndpoint {} 

Java涓嬌鐢ㄦ敞瑙i┍鍔≒OJO鏂瑰紡鏉ュ垵濮嬪寲WebSocket榪炴帴錛屽彲閫氳繃濡備笅浠g爜鏉ュ畬鎴?

javax.websocket.WebSocketContainer container = javax.websocket.ContainerProvider.getWebSocketContainer();  container.conntectToServer(MyClientEndpoint.class, new URI("ws://localhost:8080/tictactoeserver/endpoint")); 

姝ゅ悗錛屼互 @ServerEndpoint 鎴?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; color: #666666; background-color: inherit;">@ClientEndpoint 娉ㄨВ鐨勭被閮界О涓烘敞瑙g鐐?

涓鏃﹀緩绔嬩簡WebSocket榪炴帴 錛屽氨浼氬垱寤?nbsp;Session錛屽茍涓斾細璋冪敤娉ㄨВ绔偣涓互@OnOpen娉ㄨВ鐨勬柟娉? 

姝ゆ柟娉曞寘鍚簡鍑犱釜鍙傛暟:

  • javax.websocket.Session 鍙傛暟, 浠h〃鍒涘緩鐨?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; color: #666666; background-color: inherit;">Session
  • EndpointConfig 瀹炰緥鍖呭惈浜嗗叧浜庣鐐歸厤緗殑淇℃伅
  • 錛愪釜鎴栧涓互 @PathParam娉ㄨВ鐨?/code>瀛楃涓插弬鏁?鎸囩殑鏄鐐硅礬寰勭殑path鍙傛暟

涓嬮潰鐨勬柟娉曞疄鐜頒簡褰撴墦寮WebSocket鏃訛紝灝嗕細鎵撳嵃session鐨勬爣璇嗙:

@OnOpen public void myOnOpen (Session session) {    System.out.println ("WebSocket opened: "+session.getId()); } 

Session瀹炰緥鍙WebSocket鏈叧闂氨浼氫竴鐩存湁鏁?/code>. Session綾諱腑鍖呭惈浜嗚澶氭湁鎰忔濈殑鏂規硶錛屼互鍏佽寮鍙戣呰幏鍙栨洿澶氬叧浜庣殑淇℃伅銆?/p>

鍚屾椂,Session 涔熷寘鍚簡搴旂敤紼嬪簭鐗規湁鐨勬暟鎹挬瀛?鍗抽氳繃getUserProperties() 鏂規硶鏉ヨ繑鍥?nbsp;Map<String, Object>

榪欏厑璁稿紑鍙戣呭彲浠ヤ嬌鐢╯ession-鍜岄渶瑕佸湪澶氫釜鏂規硶璋冪敤闂村叡浜殑搴旂敤紼嬪簭鐗瑰畾淇℃伅鏉ュ~鍏?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; color: #666666; background-color: inherit;">Session瀹炰緥.

i褰揥ebSocket绔敹鍒版秷鎭椂錛屽皢浼氳皟鐢ㄤ互@OnMessage娉ㄨВ鐨勬柟娉?浠?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; color: #666666; background-color: inherit;">@OnMessage 娉ㄨВ鐨勬柟娉曞彲鍖呭惈涓嬮潰鐨勫弬鏁?

  • javax.websocket.Session 鍙傛暟.
  • 錛愪釜鎴栧涓互 @PathParam娉ㄨВ鐨?/code>瀛楃涓插弬鏁?鎸囩殑鏄鐐硅礬寰勭殑path鍙傛暟
  • 娑堟伅鏈韓. 涓嬮潰鏈夊彲鑳芥秷鎭被鍨嬫弿榪?

褰撳叾瀹冪鍙戦佷簡鏂囨湰娑堟伅鏃訛紝涓嬮潰鐨勪唬鐮佺墖鏂細鎵撳嵃娑堟伅鍐呭:

@OnMessage public void myOnMessage (String txt) {    System.out.println ("WebSocket received message: "+txt); }  

濡傛灉浠?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; color: #666666; background-color: inherit;">@OnMessage i娉ㄨВ鐨勬柟娉曡繑鍥炲間笉鏄?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; color: #666666; background-color: inherit;">void, WebSocket瀹炵幇浼氬皢榪斿洖鍊煎彂閫佺粰鍏跺畠绔偣.涓嬮潰鐨勪唬鐮佺墖鏂細灝嗘敹鍒扮殑鏂囨湰娑堟伅浠ラ瀛楁瘝澶у啓鐨勫艦寮忓彂鍥炵粰鍙戦佽?

@OnMessage public String myOnMessage (String txt) {    return txt.toUpperCase(); }  

鍙︿竴縐嶉氳繃WebSocket榪炴帴鏉ュ彂閫佹秷鎭殑浠g爜濡備笅:

RemoteEndpoint.Basic other = session.getBasicRemote(); other.sendText ("Hello, world"); 

鍦ㄨ繖縐嶆柟寮忎腑錛屾垜浠粠Session 瀵硅薄寮濮嬶紝瀹冨彲浠ヤ粠鐢熷懡鍛ㄦ湡鍥炶皟鏂規硶涓幏鍙?渚嬪,浠?nbsp;@OnOpen娉ㄨВ鐨勬柟娉?/code>).session瀹炰緥涓?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; color: #666666; background-color: inherit;">getBasicRemote() 鏂規硶榪斿洖鐨勬槸WebSocket鍏跺畠閮ㄥ垎鐨勪唬琛?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; color: #666666; background-color: inherit;">RemoteEndpoint. RemoteEndpoint 瀹炰緥鍙敤浜庡彂閫佹枃鏈垨鍏跺畠綾誨瀷鐨勬秷鎭紝鍚庨潰鏈夋弿榪?

褰撳叧闂璚ebSocket榪炴帴鏃?灝嗕細璋冪敤@OnClose 娉ㄨВ鐨勬柟娉曘傛鏂規硶鎺ュ彈涓嬮潰鐨勫弬鏁?

  • javax.websocket.Session 鍙傛暟. 娉ㄦ剰錛屼竴鏃ebSocket鐪熸鍏抽棴浜嗭紝姝ゅ弬鏁板氨涓嶈兘琚嬌鐢ㄤ簡錛岃繖閫氬父鍙戠敓鍦?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; color: #666666; background-color: inherit;">@OnClose 娉ㄨВ鏂規硶榪斿洖涔嬪悗.
  • javax.websocket.CloseReason 鍙傛暟錛岀敤浜庢弿榪板叧闂璚ebSocket鐨勫師鍥?濡傦細姝e父鍏抽棴錛屽崗璁敊璇?鏈嶅姟榪囪澆絳夌瓑.
  • 錛愪釜鎴栧涓互 @PathParam娉ㄨВ鐨?/code>瀛楃涓插弬鏁?鎸囩殑鏄鐐硅礬寰勭殑path鍙傛暟

涓嬮潰鐨勪唬鐮佺墖孌墊墦鍗頒簡WebSocket鍏抽棴鐨勫師鍥?

@OnClose public void myOnClose (CloseReason reason) {    System.out.prinlnt ("Closing a WebSocket due to "+reason.getReasonPhrase()); } 

瀹屾暣鎯呭喌涓嬶紝榪欓噷榪樻湁涓涓敓鍛藉懆鏈熸敞瑙?濡傛灉鏀跺埌浜嗛敊璇紝灝嗕細璋冪敤 @OnError 娉ㄨВ鐨勬柟娉曘?/p>

Interface-Driven 鏂瑰紡

annotation-driven 鏂瑰紡鍏佽鎴戜滑娉ㄨВ涓涓狫ava綾伙紝浠ュ強浣跨敤鐢熷懡鍛ㄦ湡娉ㄨВ鏉ユ敞瑙f柟娉? 

浣跨敤interface-driven鏂瑰紡,寮鍙戣呭彲緇ф壙javax.websocket.Endpoint 騫惰鐩栧叾涓殑onOpenonClose, 浠ュ強onError 鏂規硶:

public class myOwnEndpoint extends javax.websocket.Endpoint {    public void onOpen(Session session, EndpointConfig config) {...}    public void onClose(Session session, CloseReason closeReason) {...}    public void onError (Session session, Throwable throwable) {...} } 

涓轟簡鎷︽埅娑堟伅錛岄渶瑕佸湪onOpen瀹炵幇涓敞鍐屼竴涓?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; color: #666666; background-color: inherit;">javax.websocket.MessageHandler:

public void onOpen (Session session, EndpointConfig config) {    session.addMessageHandler (new MessageHandler() {...}); } 

MessageHandler 鎺ュ彛鏈変袱涓瓙鎺ュ彛: MessageHandler.Partial鍜?/code> MessageHandler.Whole

MessageHandler.Partial 鎺ュ彛搴旇鐢ㄤ簬褰撳紑鍙戣呮兂瑕佹敹鍒伴儴鍒嗘秷鎭氱煡鐨勬椂鍊?MessageHandler.Whole鐨勫疄鐜板簲璇ョ敤浜庢暣涓秷鎭埌杈鵑氱煡銆?/p>

涓嬮潰鐨勪唬鐮佺墖鏂細鐩戝惉榪涙潵鐨勬枃浠舵秷鎭紝騫跺皢鏂囨湰淇℃伅杞崲涓哄ぇ灝忕増鏈悗鍙戝洖緇欏叾瀹冪鐐癸細

public void onOpen (Session session, EndpointConfig config) {    final RemoteEndpoint.Basic remote = session.getBasicRemote();    session.addMessageHandler (new MessageHandler.Whole<String>() {       public void onMessage(String text) {                  try {                      remote.sendString(text.toUpperCase());                  } catch (IOException ioe) {                      // handle send failure here                  }              }     }); } 

娑堟伅綾誨瀷錛岀紪鐮佸櫒錛岃В鐮佸櫒

WebSocket鐨凧avaAPI闈炲父寮哄ぇ錛屽洜涓哄畠鍏佽鍙戦佷換鎴栨帴鏀朵換浣曞璞′綔涓篧ebSocket娑堟伅.

鍩烘湰涓婏紝鏈変笁縐嶄笉鍚岀被鍨嬬殑娑堟伅:

  • 鍩轟簬鏂囨湰鐨勬秷鎭?/li>
  • 浜岃繘鍒舵秷鎭?/li>
  • Pong 娑堟伅,瀹冩槸WebSocket榪炴帴鑷韓

褰撲嬌鐢╥nterface-driven妯″紡,姣忎釜session鏈澶氬彧鑳戒負榪欎笁涓笉鍚岀被鍨嬬殑娑堟伅娉ㄥ唽涓涓?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; color: #666666; background-color: inherit;">MessageHandler.

褰撲嬌鐢╝nnotation-driven妯″紡,閽堝涓嶅悓綾誨瀷鐨勬秷鎭紝鍙厑璁稿嚭鐜頒竴涓?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; color: #666666; background-color: inherit;">@onMessage 娉ㄨВ鏂規硶. 鍦ㄦ敞瑙f柟娉曚腑錛屾秷鎭唴瀹逛腑鍏佽鐨勫弬鏁頒緷璧栦簬娑堟伅綾誨瀷銆?/p>

Javadoc for the @OnMessage annotation 鏄庣‘鎸囧畾浜嗘秷鎭被鍨嬩笂鍏佽鍑虹幇鐨勬秷鎭弬鏁?

  • "濡傛灉鏂規硶鐢ㄤ簬澶勭悊鏂囨湰娑堟伅: 

    • String 鐢ㄤ簬鎺ユ敹鏁翠釜娑堟伅
    • Java 鍘熷瀷鎴栫瓑浠風殑綾葷敤浜庢帴鏀舵暣涓秷鎭茍灝嗗叾杞崲涓烘綾誨瀷
    • String 鍜?boolean 瀵圭敤浜庨儴鍒嗘帴鏀舵秷鎭?/li>
    • Reader 鐢ㄤ簬浠ラ樆濉炴祦鐨勬柟寮忔帴鏀舵暣涓秷鎭?/li>
    • 绔偣鐨勪換浣曞璞″弬鏁板瓨鍦ㄦ枃鏈В鐮佸櫒 (Decoder.Text 鎴?nbsp;Decoder.TextStream).
  • 濡傛灉鏂規硶鐢ㄤ簬澶勭悊浜岃繘鍒舵秷鎭? 

    • byte[] 鎴?nbsp;ByteBuffer 鐢ㄤ簬鎺ユ敹鏁翠釜娑堟伅
    • byte[] 鍜?boolean 瀵? 鎴栬?nbsp;ByteBuffer 鍜宐oolean瀵圭敤浜庨儴鍒嗘帴鏀舵秷鎭?/li>
    • InputStream 鐢ㄤ簬鎸夐樆濉炴祦鐨勬柟寮忔帴鏀舵暣涓秷鎭?/span>
    • 绔偣鐨勪換浣曞璞″弬鏁板瓨鍦ㄤ簩榪涘埗瑙g爜鍣?Decoder.Binary or Decoder.BinaryStream).
  • 濡傛灉鏂規硶鏄敤浜庡鐞唒ong娑堟伅: 

浠諱綍Java瀵硅薄浣跨敤緙栫爜鍣ㄩ兘鍙互緙栫爜涓哄熀浜庢枃鏈垨浜岃繘鍒剁殑娑堟伅.榪欑鍩轟簬鏂囨湰鎴栦簩榪涘埗鐨勬秷鎭皢杞緭鍒板叾瀹冪鐐癸紝鍦ㄥ叾瀹冪鐐癸紝瀹冨彲浠ヨВ鐮佹垚Java瀵硅薄錛嶆垨鑰呰鍙﹀鐨刉ebSocket 鍖呰В閲? 

閫氬父鎯呭喌涓嬶紝XML鎴朖SON鐢ㄤ簬鏉ヤ紶閫乄ebSocket娑堟伅, 緙栫爜/瑙g爜鐒跺悗浼氬皢Java瀵硅薄緙栫粍鎴怷ML鎴朖SON騫跺湪鍙︿竴绔В鐮佷負Java瀵硅薄.

encoder鏄互javax.websocket.Encoder 鎺ュ彛鐨勫疄鐜版潵瀹氫箟,decoder鏄互javax.websocket.Decoder 鎺ュ彛鐨勫疄鐜版潵瀹氫箟鐨? 

鏈夋椂錛岀鐐瑰疄渚嬪繀欏葷煡閬揺ncoders鍜宒ecoders鏄粈涔?浣跨敤annotation-driven鏂瑰紡, 鍙悜@ClientEndpoint 鍜?nbsp;@ServerEndpoint l娉ㄨВ涓殑encode鍜宒ecoder鍏冪礌浼犻?encoders鍜宒ecoders鐨勫垪琛ㄣ?/p>

Listing 1 涓殑浠g爜灞曠ず浜嗗浣曟敞鍐屼竴涓?nbsp;MessageEncoder 綾?瀹冨畾涔変簡MyJavaObject瀹炰緥鍒版枃鏈秷鎭殑杞崲). MessageDecoder 鏄互鐩稿弽鐨勮漿鎹㈡潵娉ㄥ唽鐨?

@ServerEndpoint(value="/endpoint", encoders = MessageEncoder.class, decoders= MessageDecoder.class) public class MyEndpoint { ... }  class MessageEncoder implements Encoder.Text<MyJavaObject> {    @override    public String encode(MyJavaObject obj) throws EncodingException {       ...    } }  class MessageDecoder implements Decoder.Text<MyJavaObject> {    @override     public MyJavaObject decode (String src) throws DecodeException {       ...    }     @override     public boolean willDecode (String src) {       // return true if we want to decode this String into a MyJavaObject instance    } } 

Listing 1

Encoder 鎺ュ彛鏈夊涓瓙鎺ュ彛:

  • Encoder.Text 鐢ㄤ簬灝咼ava瀵硅薄杞垚鏂囨湰娑堟伅
  • Encoder.TextStream 鐢ㄤ簬灝咼ava瀵硅薄娣誨姞鍒板瓧絎︽祦涓?/li>
  • Encoder.Binary 鐢ㄤ簬灝咼ava瀵硅薄杞崲鎴愪簩榪涘埗娑堟伅
  • Encoder.BinaryStream 鐢ㄤ簬灝咼ava瀵硅薄娣誨姞鍒頒簩榪涘埗嫻佷腑

綾諱技鍦?Decoder 鎺ュ彛鏈夊洓涓瓙鎺ュ彛:

  • Decoder.Text 鐢ㄤ簬灝嗘枃鏈秷鎭漿鎹㈡垚Java瀵硅薄
  • Decoder.TextStream 鐢ㄤ簬浠庡瓧絎︽祦涓鍙朖ava瀵硅薄
  • Decoder.Binary 鐢ㄤ簬灝嗕簩榪涘埗娑堟伅杞崲鎴怞ava瀵硅薄
  • Decoder.BinaryStream 鐢ㄤ簬浠庝簩榪涘埗嫻佷腑璇誨彇Java瀵硅薄

緇撹

WebSocket Java API涓篔ava寮鍙戣呮彁渚涗簡鏍囧噯API鏉ラ泦鎴怚ETF WebSocket鏍囧噯.閫氳繃榪欐牱鍋氾紝Web 瀹㈡埛绔垨鏈湴瀹㈡埛绔彲浣跨敤浠諱綍WebSocket瀹炵幇鏉ヨ交鏄撳湴涓嶫ava鍚庣閫氫俊銆?/p>

Java Api鏄珮搴﹀彲閰嶇疆鐨勶紝鐏墊椿鐨勶紝瀹冨厑璁竕ava寮鍙戣呬嬌鐢ㄤ粬浠枩嬈㈢殑妯″紡銆?/div>

涔熷彲鍙傝?/span>



]]> 主站蜘蛛池模板: 亚洲av无码天堂一区二区三区| 亚洲一区AV无码少妇电影☆| 无人视频在线观看免费播放影院| 国产亚洲精品线观看动态图| 香蕉成人免费看片视频app下载| 亚洲欧洲日产国产最新| 免费在线观看a级毛片| 四虎国产精品永久免费网址 | 深夜国产福利99亚洲视频| 一个人看的www免费视频在线观看| 亚洲另类图片另类电影| gogo全球高清大胆亚洲| 亚欧人成精品免费观看| h在线看免费视频网站男男| 国产精品亚洲片夜色在线| 国产AV无码专区亚洲AV漫画| 永久免费毛片在线播放| 少妇性饥渴无码A区免费| 亚洲欧美不卡高清在线| 久久亚洲国产精品| 亚洲阿v天堂在线2017免费| 国产精品成人免费福利| 国产精品1024在线永久免费| 亚洲日本成本人观看| 亚洲视频一区在线| 亚洲中文字幕无码久久精品1| 成年人网站在线免费观看| 99久久99久久精品免费观看 | 在线视频亚洲一区| 亚洲国产精品乱码在线观看97 | 野花视频在线官网免费1| 亚洲AV无码成人专区| 亚洲视频一区调教| 国产国拍精品亚洲AV片| 国产91在线免费| 歪歪漫画在线观看官网免费阅读| 免费一区二区无码东京热| 九九久久精品国产免费看小说 | 免费无遮挡无码永久视频| 一级特黄录像免费播放肥| 午夜在线亚洲男人午在线|