java与微信小程序通讯_java与微信小程序实现websocket长连接
本文实例为大家分享了java与微信小程序实现websocket长连接的具体代码,供大家参考,具体内容如下
背景:
需要在小程序实现地图固定坐标下实时查看消息
java环境 :tomcat7 jdk1.7
1.java
websocket 类
package com.qs.util;
import java.io.bufferedreader;
import java.io.ioexception;
import java.io.inputstreamreader;
import java.io.printwriter;
import java.net.httpurlconnection;
import java.net.url;
import java.util.concurrent.copyonwritearrayset;
import javax.websocket.*;
import javax.websocket.server.serverendpoint;
import com.qs.controller.usercontroller;
/**
* @serverendpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
* 注解的值将被用于监听用户连接的终端访问url地址,客户端可以通过这个url来连接到websocket服务器端
*/
@serverendpoint("/websocket")
public class websockettest {
//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
private static int onlinecount = 0;
//concurrent包的线程安全set,用来存放每个客户端对应的mywebsocket对象。若要实现服务端与单一客户端通信的话,可以使用map来存放,其中key可以为用户标识
private static copyonwritearrayset websocketset = new copyonwritearrayset();
//与某个客户端的连接会话,需要通过它来给客户端发送数据
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. jsp
java后端websocket的tomcat实现
welcome
发送消息
关闭websocket连接
var websocket = null;
//判断当前浏览器是否支持websocket
if ('websocket' in window) {
websocket = new websocket("ws://image.aropen.com/image-retrievals/websocket");
}
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 + '
';
}
//关闭websocket连接
function closewebsocket() {
websocket.close();
}
//发送消息
function send() {
var message = document.getelementbyid('text').value;
var arr=['zhangsan,hello,1','lisi,word,1','wangwu,hi,1','zhaoliu,hehe,1','tianqi,haha,1'];
window.setinterval(function(){
websocket.send(arr[math.floor(math.random()*4)]);
},5000);
//websocket.send(message);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!
java与微信小程序通讯_java与微信小程序实现websocket长连接相关推荐
- 微信是与服务器长连接,java与微信小程序实现websocket长连接.pdf
java与与微微信信小小程程序序实实现现websocket长长连连接接 本文实例为大家分享了j ava与微信小程序实现websocket长连接的具体代码,供大家参考,具体内容 下 背背景景:: 需要在 ...
- java nio socket长连接_netty学习实战—实现websocket长连接和socket之间进程通信
netty学习-实现websocket长连接和socket之间通信 最近正在学习netty,跟着教程写了一个基于WebSocket的网页聊天室,对netty有了一定的了解,现在正好项目使用到长连接,选 ...
- 基于Java和Socket实现局域网通讯的简易微信设计
资源下载地址:https://download.csdn.net/download/sheziqiong/85947114 资源下载地址:https://download.csdn.net/downl ...
- java 微信多线程推送_Java实现 微信小程序 + 消息推送
实现效果: 下面要显示五个字段 接下来,参照官方文档,一步步实现: 一.官方给出请求示例.返回示例 二.根据上面编写实体类 (1)请求参数 @Data public class SendTemplat ...
- Java接口四个类四则运算_java 实现四则运算小程序
题目地址:http://www.cnblogs.com/HQL0301/p/7502315.html 1.需求分析: (1) 按照用户输入来控制题目生成个数以及随机数的值域: (2)生成题目与答案的T ...
- java微信支付异步通知_Java中微信支付退款异步通知解码
微信所有的支付结果都是加密处理的,他和订单支付成功的异步通知不一样. 他的基本返回是: SUCCESS 我们需要对req_info解码才能看到退款的明文 解码后会得到明文: 解密步骤如下: (1)对加 ...
- java实现红包要多少钱_java实现微信红包分配算法
本文由我司收集整编,推荐下载,如有疑问,请与我司联系 java 实现微信红包分配算法 2017/03/25 0 红包算法分析有人认为,抢红包的额度是从 0.01 到剩余平均值 *N(N 是一个系数,决 ...
- java 支付结果主动通知商户_java实现微信支付结果通知
支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答. 对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽 ...
- java怎么实现查找n功能_java 实现微信搜索附近人功能
最近给andorid做后台查询数据功能,有一个需求是模仿微信的查找附近人功能. 数据库中存储每个用户的经纬度信息及用户信息,通过当前用户传递过来的经纬度查询这个用户半径N公里以内的用户信息. 数据库表 ...
最新文章
- CMakeLists.txt从入门到精通
- linux jemalloc 内存分配器 安装与使用
- 【1】万魂杀MMORPG研发回顾
- golang中如何抓取panic让程序正常退出
- [JZOJ5426]摘Galo
- win10系统excel2019单元格显示完整的年月日时分秒设置方法
- [css] 使用rem布局时怎样合理设置根标签字体大小?
- 微信今日全面开放接口
- Java-虚拟机-执行引擎/解释器/编译
- 离开APM的弹性云还是真弹性吗
- win11窗口拖动卡顿怎么办 Windows11窗口拖动卡顿的解决方法
- 广义注意力- saliency map 关注图、gaze、Att
- python爬虫微信公众号文章_Python爬虫案例:爬取微信公众号文章
- IT工程项目需求获取的主要方法
- 上海电力大学计算机专业全国排名,上海电力大学有哪些专业 上海电力大学专业排名...
- python爬虫入门——13行代码制作英语翻译器教程,小白入门一点通
- 图论中的聚类系数(Clustering coefficient)简单介绍
- 外媒:日本频繁举办黑客大赛,还邀请美俄相关专家坐阵
- 通过LRC文件分析出一首歌曲的速度
- python4.30每周一练
热门文章
- Oracle例外处理
- python supervisor 日志_Supervisor使用详解
- 用友服务器显示禁用,包头用友 U6 运行时提示端口4630 被禁用 或者 1433端口不通...
- mysql 设置时区_MySQL实战干货 | 如何处理由时区设置引发的 SQL 执行“卡顿”?...
- mysql插入日期_初识MySQL
- android电容触摸屏的驱动及其上层工作原理,android 电容屏(一):电容屏基本原理篇...
- oracle11查看dblink,配置oracle11g通过dblink+透明网关访问GBase
- opencv threshold_OpenCV-Python 立体图像的深度图 | 五十二
- seo代码优化工具_企业seo该怎么优化
- micropython中文社区-micropython支持中文啦!