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

简介: Java后端实现websocket与微信小程序端连接简单例子http://www.bieryun.com/963.html 直接附代码 前端代码:

Java后端实现websocket与微信小程序端连接简单例子http://www.bieryun.com/963.html


直接附代码
前端代码:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

 

<!DOCTYPE HTML>

<html>

<head>

<base href="<%=basePath%>">

<title>My WebSocket</title>

</head>

 

<body>

Welcome<br/>

<input id="text" type="text" /><button onclick="send()">Send</button>    <button onclick="closeWebSocket()">Close</button>

<div id="message">

</div>

</body>

 

<script type="text/javascript">

var websocket = null;

 

//判断当前浏览器是否支持WebSocket

if('WebSocket' in window){

websocket = new WebSocket("ws://localhost:8080/myWebSocket/websocket");

}

else{

alert('Not support websocket')

}

 

//连接发生错误的回调方法

websocket.onerror = function(){

setMessageInnerHTML("error");

};

 

//连接成功建立的回调方法

websocket.onopen = function(event){

setMessageInnerHTML("open");

}

 

//接收到消息的回调方法

websocket.onmessage = function(event){

setMessageInnerHTML(event.data);

}

 

//连接关闭的回调方法

websocket.onclose = function(){

setMessageInnerHTML("close");

}

 

//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。

window.onbeforeunload = function(){

websocket.close();

}

 

//将消息显示在网页上

function setMessageInnerHTML(innerHTML){

document.getElementById('message').innerHTML += innerHTML + '<br/>';

}

 

//关闭连接

function closeWebSocket(){

websocket.close();

}

 

//发送消息

function send(){

var message = document.getElementById('text').value;

websocket.send(message);

}

</script>

</html>

后端代码:

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;

 

//该注解用来指定一个URI,客户端可以通过这个URI来连接到WebSocket。类似Servlet的注解mapping。无需在web.xml中配置。

@ServerEndpoint("/websocket")

public class MyWebSocket {

//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。

private static int onlineCount = 0;

 

//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识

private static CopyOnWriteArraySet<MyWebSocket> webSocketSet = new CopyOnWriteArraySet<MyWebSocket>();

 

//与某个客户端的连接会话,需要通过它来给客户端发送数据

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(MyWebSocket 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() {

MyWebSocket.onlineCount++;

}

 

public static synchronized void subOnlineCount() {

MyWebSocket.onlineCount--;

}

}

以上是网上的前端及后端的代码(原文地址:http://www.cnblogs.com/xdp-gacl/p/5193279.html?utm_source=tuicool&utm_medium=referral),jdk版本要求是在jdk1.7.0以上,tomcat版本也需要在tomcat7.0版本以上。另外有个需要注意的点就是websocket的api包要用tomcat自带的(websocket-api.jar),一开始本人采用的是非tomcat自带的javax.websocket-api-1.0.jar包,在配置了正确的环境之后总是连接不上,会报错:Error during WebSocket handshake: Unexpected response code: 404。

正确的效果图如下:

进入页面http://localhost:8080/myWebSocket/index.jsp

输入内容,点击send

微信小程序端发起请求:

请求代码:

 

connectWebSocket:function(){
console.log("创建webSocket连接");
wx.connectSocket({
url:'ws://localhost:8080/myWebSocket/websocket',
// url:'http://eservicesit.prlife.com.cn:7001',
data:{
x: '',
y: ''
},
header:{
'content-type': 'application/json'
},
method:"GET",
success: function(res){
console.log("创建连接成功");
//do something
},
fail:function(res){
console.log("创建连接失败,原因因::"+res.errMsg);
},
complete:function(){
console.log("创建连接complete");
}
})

}控制台输出:

相关文章
|
1月前
|
NoSQL Java MongoDB
java连接MongoDB
java连接MongoDB
|
1月前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。
|
1月前
|
NoSQL Java API
Redis官方推荐的Java连接开发工具Jedis
Redis官方推荐的Java连接开发工具Jedis
|
2天前
|
监控 安全 Java
Java与物联网:连接与控制设备
Java与物联网:连接与控制设备
11 0
|
2天前
|
SQL Java 数据库连接
Java数据库编程实践:连接与操作数据库
Java数据库编程实践:连接与操作数据库
8 0
|
10天前
|
NoSQL Java 关系型数据库
Java基础教程(21)-Java连接MongoDB
【4月更文挑战第21天】MongoDB是开源的NoSQL数据库,强调高性能和灵活性。Java应用通过MongoDB Java驱动与之交互,涉及MongoClient、MongoDatabase、MongoCollection和Document等组件。连接MongoDB的步骤包括:配置连接字符串、创建MongoClient、选择数据库和集合。伪代码示例展示了如何建立连接、插入和查询数据。
|
11天前
|
Java 关系型数据库 MySQL
Java基础教程(20)-Java连接mysql数据库CURD
【4月更文挑战第19天】MySQL是流行的关系型数据库管理系统,支持SQL语法。在IDEA中加载jar包到项目类路径:右击项目,选择“Open Module Settings”,添加库文件。使用JDBC连接MySQL,首先下载JDBC驱动,然后通过`Class.forName()`加载驱动,`DriverManager.getConnection()`建立连接。执行CRUD操作,例如创建表、插入数据和查询,使用`Statement`或`PreparedStatement`,并确保正确关闭数据库资源。
|
14天前
|
安全 关系型数据库 MySQL
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
22 3
|
21天前
|
小程序 开发者
体验版小程序为何无法访问云端服务器后端接口(请求失败...(已完美解决附加图片))?
体验版小程序为何无法访问云端服务器后端接口(请求失败...(已完美解决附加图片))?
17 0
|
22天前
|
前端开发 NoSQL JavaScript
java域控连接AD遇到的问题
java域控连接AD遇到的问题

热门文章

最新文章