您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14882|回复: 0
打印 上一主题 下一主题

[php学习资料] 浏览器使用WebSocket实时通讯

[复制链接]
跳转到指定楼层
楼主
发表于 2018-6-23 19:36:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

如果你要有一个支持 WebSocket的服务器(Java、Php等),可以在浏览器中使用一个新的WebSocket服务协议,来打开一个链接:

  1. var socket = new WebSocket("ws://172.0.0.1:8080/SpringWebSocketPush/websck");  
复制代码

  T3 }- b$ f  J5 D! w$ _) S

与http://这一URL 前缀等价的WebSocket 前缀 是 ws:// ,安全 WebSocket 则有一个与http://等价的 wss:// 前缀。
% q/ q0 W. O0 g
. E' W, H# E' v1 j+ J1 E7 X5 P; F6 x8 q; u# z/ |% p: ^' g- c
该套接口对象有四个用来监听套接口事件的回调:

  1.     socket.onopen = function(){        //打开
    ! E! t) ]6 y' G+ N% m' D1 |; W! |
  2.     }3 v. Z5 F& C$ T1 o. E% K
  3. 5 I1 L2 T' M+ Y
  4.     socket.onmessage = function(){! [( p$ }& J" Q- p5 h' V% d
  5.         //在event.data消息数据3 g1 k) X" s! H- m6 w# t0 x
  6.     }6 Q" H0 \# d6 I4 [4 \, X9 [
  7. 2 T+ |. Z; o7 A+ e, G' p8 f
  8.     socket.onclose = function(){
    . V; d# U0 Q- D, ?2 U; U
  9.         //关闭WebSocket
    % l, [. |2 Y/ f9 Z% g+ E
  10.     }
    # v' P1 O+ J/ q. R' b/ f5 ?

  11. 8 G7 ?7 V+ B" l1 w  X/ u, U
  12.     socket.onerror = function(){, y2 V* Y; j5 K; ^0 c3 U
  13.         //错误触发
    2 s+ x8 J" Y5 y/ j1 C' Z
  14.     }
复制代码

( y' L6 ~6 k) ^4 G) g
/ Q" v4 i+ l+ ?

通过套接口发送数据,调用socket.send:

  1.     socket.send(message)
复制代码

0 h/ s$ ]% |6 ^( a6 ]: t! H& n* f. Y4 ?
5 E) _; p1 J, Z+ R# i6 E% ?0 D

代码附上:

  1. <!DOCTYPE html><html>
    ! n. ?, z) w) H! R7 }; a, j
  2.     <head>
    ! s4 w1 t$ z  \6 z
  3.         <meta charset="UTF-8">; B  k: j6 |  r) X$ d4 E( f! k
  4.         <meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
    5 e- f5 ?; u) t1 {& N# n
  5.         <title>WebSocket</title>: P. x8 ~9 s" B1 P1 N, i& I& S
  6.     </head>
    0 p% a$ w2 c: w/ H, J7 a
  7.     <body>
    : r  Y! d1 v% t! |, }
  8.     </body>
    ! D/ e8 O; v3 L. j" u6 ?2 p
  9.     <script>
      i/ x) n3 U9 {7 F8 N: d2 \, w, m
  10.         var socket;+ x" m8 d- C4 F+ E, \' `
  11.         if (window.WebSocket) {
    6 H/ Y$ N+ j# @& t6 o: N
  12.             socket = new WebSocket("ws://localhost:8080/myapp");
    " T& q+ t$ ]# ^: C! `
  13.             socket.onmessage = function(event) {
    # ?3 d# P% \4 e
  14.                 alert("Received data from websocket: " + event.data);
      I; e' ~( n3 @
  15.             }
    9 r6 }: h1 t* V5 y2 w, C
  16.             socket.onopen = function(event) {8 e: u3 ]* y! @, v) k5 a8 g
  17.                 alert("Web Socket opened!");
    4 ]' n  G% I+ R3 I" j  T- |# J
  18.             };
    % ^3 l1 e( Q2 f% j
  19.             socket.onclose = function(event) {$ N; D7 T) Z1 J2 J0 m' C
  20.                 alert("Web Socket closed.");
    . @  P1 p- {# d) j. x
  21.             };) U" |0 @" E3 ?( ^7 z5 p( [8 W
  22.         } else {! m; T2 z; l- R. P
  23.             alert("Your browser does not support Websockets. (Use Chrome)");
    . M- M$ C8 Y. ^( ]$ D  U/ A3 y
  24.         }+ ~( w9 Y9 }2 G

  25. ) B3 M% ]0 ^# r: ?2 g3 b5 y# h0 l
  26.         function send(message) {
    4 e# S- y: f' c$ T0 S# k
  27.             if (!window.WebSocket) {
    " Q" [! {: c& @. d' O( {9 R: e% E
  28.                 return;
    5 C  d- Z/ H' j$ ]& I$ H& |! `
  29.             }
    , u8 z; Q, e# x1 K6 D
  30.             if (socket.readyState == WebSocket.OPEN) {
    , ]8 a1 m7 s) W) v7 a6 I
  31.                 socket.send(message);, y6 F+ P; I, g6 U, d3 n
  32.             } else {
    : Z+ B5 k/ s8 m; F
  33.                 alert("The socket is not open.");
    7 x5 L/ N9 z+ b2 d* `* t1 L
  34.             }
    5 u; V+ u- {7 i7 |2 {
  35.         }1 n8 ?0 L4 D' }3 T
  36.     </script>
    " `( p7 i% f# B$ ?+ T6 `8 `/ f/ O
  37. </html>
复制代码

" a. d- x7 X$ B4 V5 p; C7 j; e( X1 s
  c1 \; n; H1 J- C. c
# z4 C0 G% l0 O% C" ^* J6 a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:40 , Processed in 0.058532 second(s), 19 queries .

Copyright © 2001-2026 Powered by cncml! X3.2. Theme By cncml!