WebSocket實現簡單的即時通訊
瀏覽器能夠與伺服器建立連線,通過已建立的通訊通道來發送和接收資料而不需要由HTTP協議引入額外其他的開銷來實現。
在本教程中我們將在Java EE環境下實現一個簡單的websockect伺服器端來和客戶端進行資料互動。
本教程需要以下環境:
- eclipse
- JDK8
- tomcat8
- Maven
pom.xml內容
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>me.gacl</groupId>
<artifactId>JavaWebSocket</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>JavaWebSocket Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>JavaWebSocket</finalName>
</build>
</project>
1.WebSocket伺服器端
WebSocketTest.java
package me.gacl.websocket;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
/**
* @ServerEndpoint 註解是一個類層次的註解,它的功能主要是將目前的類定義成一個websocket伺服器端,
* 註解的值將被用於監聽使用者連線的終端訪問URL地址,客戶端可以通過這個URL來連線到WebSocket伺服器端
*/
@ServerEndpoint("/myWebsocketTest")
public class WebSocketTest {
//靜態變數,用來記錄當前線上連線數。應該把它設計成執行緒安全的。
private static int onlineCount = 0;
//concurrent包的執行緒安全Set,用來存放每個客戶端對應的MyWebSocket物件。若要實現服務端與單一客戶端通訊的話,可以使用Map來存放,其中Key可以為使用者標識
private static CopyOnWriteArraySet<WebSocketTest> webSocketSet = new CopyOnWriteArraySet<WebSocketTest>();
//與某個客戶端的連線會話,需要通過它來給客戶端傳送資料
private Session session;
/**
* 連線建立成功呼叫的方法
* @param session 可選的引數。session為與某個客戶端的連線會話,需要通過它來給客戶端傳送資料
*/
@OnOpen
public void onOpen(Session session){
this.session = session;
webSocketSet.add(this); //加入set中
addOnlineCount(); //線上數加1
System.out.println("有新連線加入!當前線上人數為" + getOnlineCount());
}
/**
* 連線關閉呼叫的方法
*/
@OnClose
public void onClose(){
webSocketSet.remove(this); //從set中刪除
subOnlineCount(); //線上數減1
System.out.println("有一連線關閉!當前線上人數為" + getOnlineCount());
}
/**
* 收到客戶端訊息後呼叫的方法
* @param message 客戶端傳送過來的訊息
* @param session 可選的引數
*/
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("來自客戶端的訊息:" + message);
//群發訊息
for(WebSocketTest item: webSocketSet){
try {
item.sendMessage(message);
} catch (IOException e) {
e.printStackTrace();
continue;
}
}
}
/**
* 發生錯誤時呼叫
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error){
System.out.println("發生錯誤");
error.printStackTrace();
}
/**
* 這個方法與上面幾個方法不一樣。沒有用註解,是根據自己需要新增的方法。
* @param message
* @throws IOException
*/
public void sendMessage(String message) throws IOException{
this.session.getBasicRemote().sendText(message);
//this.session.getAsyncRemote().sendText(message);
}
public static synchronized int getOnlineCount() {
return onlineCount;
}
public static synchronized void addOnlineCount() {
WebSocketTest.onlineCount++;
}
public static synchronized void subOnlineCount() {
WebSocketTest.onlineCount--;
}
}
2. 客戶端
<%@ page language="java" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>Java後端WebSocket的Tomcat實現</title>
</head>
<body>
Welcome<br/><input id="text" type="text"/>
<button onclick="send()">傳送訊息</button>
<hr/>
<button onclick="closeWebSocket()">關閉WebSocket連線</button>
<hr/>
<div id="message"></div>
</body>
<script type="text/javascript">
var websocket = null;
//判斷當前瀏覽器是否支援WebSocket
if ('WebSocket' in window) {
ws://IP地址:埠號/專案名/@ServerEndpoint中的value值
websocket = new WebSocket("ws://192.168.43.148:8080/JavaWebSocket/myWebsocketTest");
}
else {
alert('當前瀏覽器 Not support websocket')
}
//連線發生錯誤的回撥方法
websocket.onerror = function () {
setMessageInnerHTML("WebSocket連線發生錯誤");
};
//連線成功建立的回撥方法
websocket.onopen = function () {
setMessageInnerHTML("WebSocket連線成功");
}
//接收到訊息的回撥方法
websocket.onmessage = function (event) {
setMessageInnerHTML(event.data);
}
//連線關閉的回撥方法
websocket.onclose = function () {
setMessageInnerHTML("WebSocket連線關閉");
}
//監聽視窗關閉事件,當視窗關閉時,主動去關閉websocket連線,防止連線還沒斷開就關閉視窗,server端會拋異常。
window.onbeforeunload = function () {
closeWebSocket();
}
//將訊息顯示在網頁上
function setMessageInnerHTML(innerHTML) {
document.getElementById('message').innerHTML += innerHTML + '<br/>';
}
//關閉WebSocket連線
function closeWebSocket() {
websocket.close();
}
//傳送訊息
function send() {
var message = document.getElementById('text').value;
websocket.send(message);
}
</script>
</html>
相關推薦
WebSocket實現簡單的即時通訊
瀏覽器能夠與伺服器建立連線,通過已建立的通訊通道來發送和接收資料而不需要由HTTP協議引入額外其他的開銷來實現。 在本教程中我們將在Java EE環境下實現一個簡單的websockect伺服器端來和客戶端進行資料互動。 本教程需要以下環境: eclipse JDK8
websocket實現簡單聊天程序
spa nodejs end 地址 person focus data 實現 完成 程序的流程圖: 主要代碼: 服務端 app.js 先加載所需要的通信模塊: var express = require(‘express‘); var app = express();
websocket實現簡單的通信
clas continue app 線程 for 函數 ets catch solid websocket server端 #coding=utf8 #!/usr/bin/python import struct,socket import h
WebSocket實現web即時通信(後端nodejs實現)
tcp ica pri har == bootstra query gif 不容易 WebSocket實現web即時通信一、首先看一下,HTTP、ajax輪詢、long poll和WebSocket的區別:1、HTTP 協議(短連接):一個 Request 一個 Respo
flask + websocket實現簡單的單聊和群聊
單聊 from flask import Flask,request,render_template from geventwebsocket.handler import WebSocketHandler from gevent.pywsgi import WSGIServer fr
JavaScript WebSocket實現長連線通訊連線重連
JavaScript-JS依靠WebSoket也可以像其他語言一樣能夠實現通訊程式碼,不過使用的時候需要注意檢查連線斷開的情況。最基本的必須保證IP和埠都可以訪問。 目錄 WebSocket程式碼及測試 呼叫初始化程式碼 通訊示例程式碼 測試效果 WebSocket連線關
百度t7 課程, websocket 實現簡單聊天室
最簡單的聊天室,我寫了一個小時, 寫了10 分鐘,除錯50分鐘 因為 我是小菜鳥,不過凡事都有過程 index.html <!DOCTYPE html> <html lang="en"> <head> <meta c
使用cocoscreator + node.js + websocket實現簡單的聊天服務
先上個效果圖: 使用cocoscreator 1.9.1 + node.js + websocket實現,沒有使用socket.io, 全部自己封裝,長連線進行封裝後可以和短連線使用方法一樣,使用簡單,方便以後開發網路遊戲。 1、客戶端: 主要就是聊天內容的顯示,自動換行和背景擴充套件,程式碼大概如下:
websocket實現簡單聊天
上個月公司開發APP中用到了實時聊天功能,一開始覺得不可思議,因為完全沒有接觸過,然後聽安卓和ios的說之前的公司都是用第三方sdk的很少看到自己寫聊天功能的(南京大公司不多,我想大點的公司自己寫還是可以的,因為實現功能和商用還是有點區別的),老闆對我們的要求也不高,鼓勵我們
***Java中WebSocket實現簡單的聊天***
Java中WebSocket實現簡單的聊天 1 在pom.xml中新增Jar包依賴 <dependency> <groupId>org.springframework.boot</groupId> <arti
swoole實現IM即時通訊demo
通過使用swoole 實現IM即時通訊介面 這是服務端程式碼 im聊天介面請看http://swoole.zhouhao520.com/index.html 這個是我自己的伺服器,大家可以玩玩這個聊天場景; 前段頁面我是自己從網
一個基於webSocket實現前後端通訊的小demo
#sell 一般的web專案都是前臺向後臺傳送訊息,但是有些時候我們也需要從後端向前臺傳送訊息,比如說zfb的回撥資訊,微信的模板推送訊息等,下面通過Eclipse+Tomcat實現一個前後臺通訊的小demo; 先建立一個web專案 index.jsp寫一個簡單的頁面來
【tcp-ip學習總結】使用tcp協議實現簡單的通訊小程式
環境:vs2013 server.c #include<Winsock2.h> #include<stdio.h> #pragma comment(lib,"Ws2_32.lib") #include<stdlib.h&
spring boot + webSocket 實現簡單會話與線上人數統計的demo
webSocket推送是常用於生產專案的模組,在我們部門做的一個彙報演示的demo中遇到了webSocket的一些問題。 自己下來看看了看webSocket的東西,結合spring boot 做了一個簡單的demo; 介紹的部分大家可以參考眾多的帖子,度娘 http://w
java WebSocket實現簡單的聊天室(包括群發和點對點聊天)
今天突然看到了WebSocket然後就網上找了一個例子,然後修改了下,實現了簡單的聊天室,包括群聊和點對點聊天。 使用的程式碼如下 jsp程式碼: <%@ page language="java" import="java.util.*" pageEncoding="
【Flask + WebSocket 實現簡單的聊天室】
群聊 後端程式碼 from flask import Flask, request, render_template from geventwebsocket.handler import WebSocketHandler from gevent.pywsgi import WS
SpringBoot WebSocket 實現簡單的聊天功能
前言 什麼是WebSocket WebSocket為瀏覽器和伺服器之間提供了雙工非同步通訊功能,也就是說我們可以利用瀏覽器給伺服器傳送訊息,伺服器也可以給瀏 覽器傳送訊息,目前主流瀏覽器的主流版本對WebSocket的支援都算是比較好的,但是在實際開發
利用websocket搭建網頁即時通訊(demo)
參考文章: 過一對一的通訊 過程中遇到的 問題 websocket中獲取httpsession : https://www.cnblogs.com/jarviswhj/p/4227559.html 本文中使用springboot搭建伺服器,上述連線中的類需要配置到s
spring websocket實現前後端通訊
專案要用websocket實現一個前後端實時通訊的功能,做完之後感觸頗多,寫個部落格回顧下整個歷程,也希望能給後面的同志有點幫助。百度網盤示例原始碼:連結:https://pan.baidu.com/s/1Gi3qRyLO-lTnkVn4MqGIJA 密碼:4ovr我使用
基於websocket的網頁即時通訊(可傳附件圖片塗鴉、最小化狀態通知).NET,winform客戶端、服務端
公司網站需要即時通訊,就研究了下主要以下功能:websocket通訊,網頁端即時通訊,可以傳送表情,可以傳送附件,可以塗鴉,可以實現客服一對多聊天,winform做服務端負責收發,notification提醒,一番百度下來發現websocket做客戶端+superwebsoc