中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

沈陽(yáng)犀牛云做網(wǎng)站怎么樣長(zhǎng)沙正規(guī)seo優(yōu)化價(jià)格

沈陽(yáng)犀牛云做網(wǎng)站怎么樣,長(zhǎng)沙正規(guī)seo優(yōu)化價(jià)格,做網(wǎng)站的服務(wù)器cpu異常,網(wǎng)站備案難嗎1、WebSocket是HTML5開(kāi)始提供的一種在單個(gè) TCP 連接上進(jìn)行全雙工通訊的協(xié)議。在WebSocket API中,瀏覽器和服務(wù)器只需要做一個(gè)握手的動(dòng)作,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。 2、瀏覽器通過(guò) Java…

1、WebSocket是HTML5開(kāi)始提供的一種在單個(gè) TCP 連接上進(jìn)行全雙工通訊的協(xié)議。在WebSocket API中,瀏覽器和服務(wù)器只需要做一個(gè)握手的動(dòng)作,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。
2、瀏覽器通過(guò) JavaScript 向服務(wù)器發(fā)出建立 WebSocket 連接的請(qǐng)求,連接建立以后,客戶端和服務(wù)器端就可以通過(guò) TCP 連接直接交換數(shù)據(jù)。
3、當(dāng)你獲取 Web Socket 連接后,你可以通過(guò) send() 方法來(lái)向服務(wù)器發(fā)送數(shù)據(jù),并通過(guò) onmessage 事件來(lái)接收服務(wù)器返回的數(shù)據(jù)。

使用說(shuō)明:

使用步驟:1、獲取WebSocket客戶端對(duì)象。

例如: var webSocket = new WebSocket(url);

使用步驟:2、獲取WebSocket回調(diào)函數(shù)。

例如:webSocket.onmessage = function (event) {console.log('WebSocket收到消息:' + event.data);

事件類型WebSocket回調(diào)函數(shù)事件描述
openwebSocket.onopen當(dāng)打開(kāi)連接后觸發(fā)
messagewebSocket.onmessage當(dāng)客戶端接收服務(wù)端數(shù)據(jù)時(shí)觸發(fā)
errorwebSocket.onerror當(dāng)通信異常時(shí)觸發(fā)
closewebSocket.onclose當(dāng)連接關(guān)閉時(shí)觸發(fā)
使用步驟:3、發(fā)送消息給服務(wù)端

例如:webSokcet.send(jsonStr)?結(jié)合實(shí)際場(chǎng)景 本案例采用JSON字符串進(jìn)行消息通信。


?

先引入websocket依賴

1

2

3

4

5

<!-- websocket消息推送 -->

<dependency>

????<groupId>org.springframework.boot</groupId>

????<artifactId>spring-boot-starter-websocket</artifactId>

</dependency>

添加 WebSocketConfig 配置

1

2

3

4

5

6

7

8

9

10

11

12

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.socket.server.standard.ServerEndpointExporter;

@Configuration

public class WebSocketConfig {

????@Bean

????public ServerEndpointExporter serverEndpointExporter() {

????????return new ServerEndpointExporter();

????}

實(shí)體bean接收客戶端發(fā)過(guò)來(lái)的信息

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

@Data

public class SocketMsg {

????/**

?????* 聊天類型 0 群聊 1 單聊

?????**/

????private int type;

????/**

?????* 發(fā)送者

?????**/

????private String sendOutUser;

????/**

?????* 接受者

?????**/

????private String receiveUser;

????/**

?????* 消息

?????**/

????private String msg;

}

WebSocketUtil

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

import cn.hutool.json.JSONUtil;

import org.springframework.stereotype.Component;

import javax.websocket.*;

import javax.websocket.server.PathParam;

import javax.websocket.server.ServerEndpoint;

import java.util.concurrent.ConcurrentHashMap;

import java.util.concurrent.CopyOnWriteArraySet;

/**

?* WebSocket 連接測(cè)試

?*/

@Component

@ServerEndpoint("/web-socket/{userName}")

public class WebSocketUtil {

????private String userName;

????private Session session;

????/** 固定前綴? */

????private static final String USER_NAME_PREFIX = "user_name_";

????/**

?????* 用來(lái)存放每個(gè)客戶端對(duì)應(yīng)的MyWebSocket對(duì)象。

?????**/

????private static CopyOnWriteArraySet<WebSocketUtil> webSocketSet = new CopyOnWriteArraySet<>();

????/**

?????* 存放Session集合,方便推送消息 (javax.websocket.Session)

?????*/

????private static ConcurrentHashMap<String, Session> sessionMap = new ConcurrentHashMap<>();

????/**

?????* 私聊:向指定客戶端推送消息

?????*/

????public synchronized static void privateMessage(SocketMsg socketMsg) {

????????//接收消息的用戶

????????Session receiveUser = sessionMap.get(USER_NAME_PREFIX + socketMsg.getReceiveUser());

????????//發(fā)送給接收者

????????if(receiveUser != null){

????????????//發(fā)送給接收者

????????????System.out.println(socketMsg.getSendOutUser()+" 向 "+socketMsg.getReceiveUser()+" 發(fā)送了一條消息:"+socketMsg.getMsg());

????????????receiveUser.getAsyncRemote().sendText(socketMsg.getSendOutUser()+":"+socketMsg.getMsg());

????????}else{

????????????//發(fā)送消息的用戶

????????????System.out.println(socketMsg.getSendOutUser()+" 私聊的用戶 "+socketMsg.getReceiveUser()+" 不在線或者輸入的用戶名不對(duì)");

????????????Session sendOutUser = sessionMap.get(USER_NAME_PREFIX + socketMsg.getSendOutUser());

????????????//將系統(tǒng)提示推送給發(fā)送者

????????????sendOutUser.getAsyncRemote().sendText("系統(tǒng)消息:對(duì)方不在線或者您輸入的用戶名不對(duì)");

????????}

????}

????/**

?????* 群聊:公開(kāi)聊天記錄

?????* @param userName 發(fā)送者的用戶名稱(當(dāng)前用戶)

?????* @param message 發(fā)送的消息

?????* @param flag 用來(lái)標(biāo)識(shí) 是否要將消息推送給 當(dāng)前用戶

?????*/

????public synchronized static void publicMessage(String userName,String message,boolean flag) {

????????for (WebSocketUtil item : webSocketSet) {

????????????Session session = item.session;

????????????if (flag){

????????????????session.getAsyncRemote().sendText(message);

????????????}else {

????????????????//獲取發(fā)送這條消息的用戶

????????????????Session currentUser = sessionMap.get(USER_NAME_PREFIX + userName);

????????????????//消息不用推送到發(fā)送者的客戶端

????????????????if (!session.getId().equals(currentUser.getId())){

????????????????????session.getAsyncRemote().sendText(message);

????????????????}

????????????}

????????}

????????System.out.println("公共頻道接收了一條消息:"+message);

????}

????/**

?????* 監(jiān)聽(tīng):連接成功

?????* @param session

?????* @param userName 連接的用戶名

?????*/

????@OnOpen

????public void onOpen(Session session, @PathParam("userName") String userName) {

????????this.userName = userName;

????????this.session = session;

????????sessionMap.put(USER_NAME_PREFIX + userName, session);

????????webSocketSet.add(this);

????????//在線數(shù)加1

????????String tips = userName+" 加入聊天室。當(dāng)前聊天室人數(shù)為" + webSocketSet.size();

????????System.out.println(tips);

????????publicMessage(userName,tips,true);

????}

????/**

?????* 監(jiān)聽(tīng):收到客戶端發(fā)送的消息

?????* @param message 發(fā)送的信息(json格式,里面是 SocketMsg 的信息)

?????*/

????@OnMessage

????public void onMessage(String message) {

????????if (JSONUtil.isTypeJSONObject(message)) {

????????????SocketMsg socketMsg = JSONUtil.toBean(message, SocketMsg.class);

????????????if(socketMsg.getType() == 1){

????????????????//單聊,需要找到發(fā)送者和接受者

????????????????privateMessage(socketMsg);

????????????}else{

????????????????//群發(fā)消息

????????????????publicMessage(socketMsg.getSendOutUser(),socketMsg.getSendOutUser()+": "+socketMsg.getMsg(),false);

????????????}

????????}

????}

????/**

?????* 監(jiān)聽(tīng): 連接關(guān)閉

?????*/

????@OnClose

????public void onClose() {

????????if (sessionMap.containsKey(USER_NAME_PREFIX + userName)) {

????????????//連接關(guān)閉后,將此websocket從set中刪除

????????????sessionMap.remove(USER_NAME_PREFIX + userName);

????????????webSocketSet.remove(this);

????????}

????????String tips = userName+" 退出聊天室。當(dāng)前聊天室人數(shù)為" + webSocketSet.size();

????????System.out.println(tips);

????????publicMessage(userName,tips,true);

????}

????/**

?????* 監(jiān)聽(tīng):發(fā)生異常

?????* @param error

?????*/

????@OnError

????public void onError(Throwable error) {

????????System.out.println("userName為:" + userName + ",發(fā)生錯(cuò)誤:" + error.getMessage());

????????error.printStackTrace();

????}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

<!DOCTYPE html>

<html lang="en">

????<head>

????????<meta charset="UTF-8">

????????<meta http-equiv="X-UA-Compatible" content="IE=edge">

????????<meta name="viewport" content="width=device-width, initial-scale=1.0">

????????<title>聊天室</title>

????????<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

????????<style type="text/css">

????????????input{

????????????????width: 150px;

????????????????height: 30px;

????????????????line-height: 25px;

????????????????padding: 5px 10px;

????????????????border-radius: 5px;

????????????????border: 2px solid;

????????????????font-size: 16px;

????????????}

????????????#msg{

????????????????width: 300px;

????????????}

????????????button{

????????????????width: 80px;

????????????????height: 44px;

????????????????padding: 5px 20px;

????????????????border-radius: 5px;

????????????}

????????</style>

????</head>

????<body>

????????聊天室<br/><br/>

????????<input type="text" id="sendOutUser" placeholder="自己的用戶名">

????????<button onclick="connectWebSocket()">上線</button>

????????<button onclick="closeWebSocket()">下線</button>

????????<br/><br>

????????<input type="text" id="msg" placeholder="要發(fā)送的信息"/>

????????<input type="text" id="receiveUser" placeholder="接收人的用戶名"/>

????????<button onclick="send()">發(fā)送</button>

????????<br><br>

????????<hr>

????????<div id="msgList"></div>

????????<script type="text/javascript">

????????????var websocket = null;

????????????//連接WebSocket

????????????function connectWebSocket() {

????????????????var sendOutUser = document.getElementById("sendOutUser").value;

????????????????if (sendOutUser === "") {

????????????????????alert("請(qǐng)輸入用戶名");

????????????????????return;

????????????????}

????????????????//判斷當(dāng)前瀏覽器是否支持websocket

????????????????if ('WebSocket' in window) {

????????????????????websocket = new WebSocket("ws://localhost:7070/web-socket/"+document.getElementById("sendOutUser").value);

????????????????} else {

????????????????????alert('當(dāng)前瀏覽器 not support websocket')

????????????????}

????????????????//連接發(fā)生錯(cuò)誤的回調(diào)方法

????????????????websocket.onerror = function () {

????????????????????alert("連接發(fā)生錯(cuò)誤");

????????????????};

????????????????//連接成功建立的回調(diào)方法

????????????????websocket.onopen = function () {

????????????????????var sendOutUser = document.getElementById("sendOutUser")

????????????????????sendOutUser.readOnly = true

????????????????????sendOutUser.style.backgroundColor='#ddd'

????????????????}

????????????????//接收到消息的回調(diào)方法

????????????????websocket.onmessage = function (event) {

????????????????????console.log(event.data)

????????????????????innerdiv("",event.data)

????????????????}

????????????????//連接關(guān)閉的回調(diào)方法

????????????????websocket.onclose = function () {

????????????????????innerdiv("","websocket連接關(guān)閉");

????????????????}

????????????????//監(jiān)聽(tīng)窗口關(guān)閉事件,當(dāng)窗口關(guān)閉時(shí),主動(dòng)去關(guān)閉websocket連接,防止連接還沒(méi)斷開(kāi)就關(guān)閉窗口,server端會(huì)拋異常。

????????????????window.onbeforeunload = function () {

????????????????????closewebsocket();

????????????????}

????????????}

????????????//關(guān)閉連接

????????????function closeWebSocket() {

????????????????websocket.close();

????????????}

????????????//發(fā)送消息

????????????function send() {

????????????????var m = new Map(); // 空Map

????????????????var sendOutId = document.getElementById("sendOutUser")? //發(fā)送者

????????????????var msg = document.getElementById("msg").value? //發(fā)送消息

????????????????if (msg === "") {

????????????????????alert("請(qǐng)輸入消息");

????????????????????return;

????????????????}

????????????????var receiveUser = document.getElementById("receiveUser").value //接收者

????????????????m.set("sendOutUser",sendOutUser.value);

????????????????m.set("msg",msg)

????????????????// 接收者為空時(shí),type為群聊,否則為私聊

????????????????if (receiveUser === "") {

????????????????????m.set("type",0)

????????????????}else{

????????????????????m.set("receiveUser",receiveUser)

????????????????????m.set("type",1)

????????????????}

????????????????json = mapToJson(m)

????????????????websocket.send(json)

????????????????innerdiv("我",msg)

????????????}

????????????//map轉(zhuǎn)換為json

????????????function? mapToJson(map) {

????????????????var obj= Object.create(null);

????????????????for (var[k,v] of map) {

????????????????????obj[k] = v;

????????????????}

????????????????return JSON.stringify(obj);

????????????}

????????????//顯示聊天記錄到頁(yè)面

????????????function innerdiv(id,txt){

????????????????var msgList = document.getElementById("msgList")

????????????????if (id === "") {

????????????????????msgList.innerHTML += "<div>" + txt + "</div><br>"

????????????????}else{

????????????????????msgList.innerHTML += "<div>"+ id +": "+txt+ "</div><br>"

????????????????}

????????????}

????????</script>

????</body>

</html>

http://www.risenshineclean.com/news/44390.html

相關(guān)文章:

  • 杭州 手機(jī)網(wǎng)站免費(fèi)搭建網(wǎng)站的軟件
  • 使用tag的網(wǎng)站最近一周的新聞大事10條
  • 織夢(mèng)學(xué)校網(wǎng)站seo關(guān)鍵詞推廣方式
  • 百度搜索推廣技巧免費(fèi)外鏈網(wǎng)站seo發(fā)布
  • 沈陽(yáng)做網(wǎng)站哪家便宜深圳最新消息今天
  • 做的好的國(guó)外網(wǎng)站東莞做好網(wǎng)絡(luò)推廣
  • 貿(mào)易公司寮步網(wǎng)站建設(shè)極致發(fā)燒百度在線入口
  • 赤峰做企業(yè)網(wǎng)站公司企業(yè)網(wǎng)站建設(shè)方案策劃
  • 網(wǎng)站彈出信息怎么做怎么快速優(yōu)化關(guān)鍵詞排名
  • 專門做娛樂(lè)場(chǎng)所的設(shè)計(jì)網(wǎng)站近三天發(fā)生的大事
  • 可以做動(dòng)效的網(wǎng)站百度競(jìng)價(jià)代運(yùn)營(yíng)外包
  • 深圳室內(nèi)設(shè)計(jì)公司排行關(guān)鍵詞優(yōu)化一年的收費(fèi)標(biāo)準(zhǔn)
  • 網(wǎng)站被k申訴電商還有發(fā)展前景嗎
  • 網(wǎng)站開(kāi)發(fā) 性能方面百度的網(wǎng)址怎么寫
  • 購(gòu)物網(wǎng)站app騰訊域名
  • 做網(wǎng)站有發(fā)票嗎站外推廣怎么做
  • 紅河北京網(wǎng)站建設(shè)百度輿情
  • 國(guó)內(nèi)室內(nèi)設(shè)計(jì)師南寧百度seo軟件
  • 網(wǎng)站在工信部備案軟文案例400字
  • 電子商城網(wǎng)站建設(shè)seo網(wǎng)站優(yōu)化技術(shù)
  • wordpress 網(wǎng)站小模塊seo網(wǎng)站推廣什么意思
  • 外貿(mào)論壇有哪些平臺(tái)抖音seo搜索優(yōu)化
  • 漣水做網(wǎng)站二十個(gè)優(yōu)化
  • 北海做網(wǎng)站網(wǎng)站建設(shè)哪家好seo技術(shù)博客
  • 路由器做網(wǎng)站主機(jī)要備案嗎外鏈網(wǎng)
  • WordPress源碼帶會(huì)員中心系統(tǒng)排名優(yōu)化哪家專業(yè)
  • 無(wú)錫做網(wǎng)站品牌公司百度人工客服在線咨詢電話
  • 太原做網(wǎng)站的公司網(wǎng)站建設(shè)網(wǎng)絡(luò)推廣是以企業(yè)產(chǎn)品或服務(wù)
  • 網(wǎng)店運(yùn)營(yíng)規(guī)劃如何優(yōu)化關(guān)鍵詞的排名
  • 淘寶做短視頻網(wǎng)站好鏈接買賣價(jià)格