开发者社区> 优惠券发放> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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");
}
})

}控制台输出:

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Node.js+koa--后端管理系统】用户注册接口设计 | 连接Mysql数据库 | 校验注册权限
【Node.js+koa--后端管理系统】用户注册接口设计 | 连接Mysql数据库 | 校验注册权限
0 0
APP还在用域名连接后端?用IP提速N倍!
无线时代,网络稳定性差,应用流量敏感,APP与Server之间每次HTTP请求都需要进行DNS解析,有没有可能直接使用IP来提速呢?
0 0
APP还在用域名连接后端?用IP提速N倍!
无线时代,网络稳定性差,应用流量敏感,APP与Server之间每次HTTP请求都需要进行DNS解析,有没有可能直接使用IP来提速呢?
389 0
聚是一团火散作满天星,前端Vue.js+elementUI结合后端FastAPI实现大文件分片上传
分片上传并不是什么新概念,尤其是大文件传输的处理中经常会被使用,在之前的一篇文章里:[python花式读取大文件(10g/50g/1t)遇到的性能问题(面试向)](https://v3u.cn/a_id_97)我们讨论了如何读写超大型文件,本次再来探讨一下如何上传超大型文件,其实原理都是大同小异,原则就是化整为零,将大文件进行分片处理,切割成若干小文件,随后为每个分片创建一个新的临时文件来保存其内容,待全部分片上传完毕后,后端再按顺序读取所有临时文件的内容,将数据写入新文件中,最后将临时文件再删掉。
0 0
最方便的前端后端数据库部署
最方便的前端后端数据库部署
0 0
前端和后端----Indexof
indexof:可返回某个指定的字符串值在字符串中首次出现的位置。
0 0
图片URL转file文件(前端+后端node.js)
图片URL转file文件(前端+后端node.js)
0 0
前端下载后端文件流-vue或者原生
下载后端文件流各种方法
0 0
+关注
优惠券发放
阿里云优惠码阿里云推荐券bieryun.com
文章
问答
文章排行榜
最热
最新
相关电子书
更多
机器学习在互联网后端技术中的应用
立即下载
机器学习在互联网后端技术中的应用
立即下载
Java 8 简明教程
立即下载