关闭

一个基于webSocket实现前后端通信的小demo

35人阅读 评论(0) 收藏 举报
分类:

一般的web项目都是前台向后台发送消息,但是有些时候我们也需要从后端向前台发送消息,比如说zfb的回调信息,微信的模板推送消息等,下面通过Eclipse+Tomcat实现一个前后台通信的小demo;

先创建一个web项目  index.jsp写一个简单的页面来显示消息

<%@ page language="java" pageEncoding="UTF-8" %>
<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>
<script>
var websocket = null;
if('WebSocket' in window){
websocket = new WebSocket("ws://127.0.0.1:8080/testWebSocket/websocket")
}else{
alert("当前浏览器不支持websocket")
}
websocket.onerror = function(){
setMessageInHtml("发送错误");
}
websocket.onopen = function(){
setMessageInHtml("建立连接")
}
websocket.onmessage  = function(event){
setMessageInHtml(event.data);
}
websocket.onclose = function(){
setMessageInHtml("关闭WebSocket连接")
}
window.onbeforeunload = function(){
closeWebsocket();
}
function setMessageInHtml(message){
document.getElementById('message').innerHTML += message+'</br>'
}
function closeWebsocket(){
websocket.colse();
}
function send(){
var msg = document.getElementById('text').value;
websocket.send(msg);
}
</script>
</body>
</html>

先在maven导入需要的jar包

</dependency>
    <dependency>
         <groupId>javax</groupId>
         <artifactId>javaee-api</artifactId>
         <version>7.0</version>
         <scope>provided</scope>
</dependency>

再来新建一个java文件package testWebSocket;


import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;


import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;


@ServerEndpoint("/websocket")
public class WebSocketTest {
//记录当前连接数
private static int onlineCount = 0;
//记录与每个客服端的连接
private static CopyOnWriteArraySet<WebSocketTest> arraySet = new CopyOnWriteArraySet<WebSocketTest>();
//状态管理
private Session session;
//当打开连接时
@OnOpen
public void onOpen(Session session) {
// TODO Auto-generated method stub
this.session = session;
arraySet.add(this);
addOnlineCount();
System.out.println("有新连接进来,当前连接数为:" + getOnlineCount());
}

//当关闭连接时
@OnClose
public void onClose() {
// TODO Auto-generated method stub
arraySet.remove(this);
subOnlineCount();
}

//收到消息
@OnMessage
public void onMessage(String message,Session session) {
// TODO Auto-generated method stub
System.out.println("从客户端收到的消息是:" + message);
//群发消息
for (WebSocketTest webSocketTest : arraySet) {
try {

//向客户端发送消息
webSocketTest.sendMessage(message);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}



}
@OnError
public void OnError(Session session,Throwable error) {
// TODO Auto-generated method stub
System.out.println("发送错误");
error.printStackTrace();
}
public void sendMessage(String message) throws IOException{
this.session.getBasicRemote().sendText(message);
}
public static synchronized int getOnlineCount() {
return onlineCount;
}

public static synchronized void subOnlineCount() {
onlineCount--;
}

public static synchronized void addOnlineCount() {
onlineCount++;
}

}

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

基于html5websocket java实现简单通讯(虽然通了但是...你懂得)

很早就想写一下基于Html5 websocket通讯的但是一直没有下手,今天心血来潮试了一下,原来以为是html5 socket的所以直接用以前自己弄得socket java服务来当服务端,百度了别人...
  • u014484873
  • u014484873
  • 2016-05-17 15:41
  • 3752

基于WebRTC实现页面浏览器视频通话-原理及实现demo

基于Chrome、Java、WebSocket、WebRTC实现浏览器视频通话,整个例子中Java+WebSocket起到的作用是负责客户端之间的通信,并不负责视频的传输,视频的传输依赖于WebRTC...
  • zeb_perfect
  • zeb_perfect
  • 2016-10-20 10:47
  • 3456

Java后端实现websocket与微信小程序端连接简单例子

直接附代码 前端代码: String path = request.getContextPath(); String basePath = request.get...
  • qq545923664
  • qq545923664
  • 2016-12-08 14:42
  • 10468

写一个Tomcat+Okhttp实现的聊天websocket聊天框架(一)-- 完成客户端和服务端的通信

今年的重点就是跟网络刚,学习网络没有个服务端技术是不行的,tomcat7之后支持websocket协议。初步构想是,实现一个服务端使用Tomcat ,客户端使用Okhttp的websocket聊天框架...
  • jiacc0110
  • jiacc0110
  • 2017-04-02 11:02
  • 1325

用SuperWebSocket框架实现的WebSocket服务端Demo源码

  • 2017-12-27 15:40
  • 6.54MB
  • 下载

一个利用WinInet通信的简单客户端Demo

WinInet简介 WinInet是微软提供的对Windows客户端与服务器通信的API,它是一个网络编程接口,包含了HTTP、FTP和Gopher,借助于这些接口,开发者不需要了解底层的一些知识,只...
  • u011645174
  • u011645174
  • 2014-01-20 14:20
  • 1598

C# Socket异步通信demo,一个服务器对应多个客户端

最近做了个客户端和服务器通信的小程序,按照惯例,下面是程序界面,可以看到现在开了两个客户端,一个是127.0.0.1:2026,另一个是127.0.0.1:2030。源码服务listen可以自定义客户...
  • wuma0q1an
  • wuma0q1an
  • 2016-04-01 09:01
  • 2414

nodejs--websocket简易代码实现局域网多个客户端进行通信

初识websocket先安装好websocket插件:命令窗输 npm install websocket 命令窗运行文件代码:var express = require('express'); v...
  • xxhdcblogzh888
  • xxhdcblogzh888
  • 2017-07-20 11:27
  • 228

Spring MVC(11):通过 WebSocket 实现前后端全双工通信

Spring WebSocket 支持 通常应用程序之间交换信息会使用如 JMS、AMQP 等技术,但是它们都无法实现浏览器客户端和服务器之间的全双工通信,基于 HTML5 的 WebSoc...
  • Al_assad
  • Al_assad
  • 6天前 16:09
  • 39

websocket+php实现前后端实时通信

使用websocket+php实现前后端实时通信,由于发送的文件可能是大文件,所以本代码对大文件进行了分片发送处理; 由于websocket是应用层协议,即websocket对需要发送的内容进行了封装...
  • little_rabbit_baby
  • little_rabbit_baby
  • 2016-11-16 11:12
  • 5879
    个人资料
    • 访问:226次
    • 积分:56
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档